AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 175482
Accepted
p.s.w.g
p.s.w.g
Asked: 2017-06-06 12:39:30 +0800 CST2017-06-06 12:39:30 +0800 CST 2017-06-06 12:39:30 +0800 CST

Impedir que o usuário privilegiado negue o acesso ao SA

  • 772

Eu tenho que configurar um sistema onde UserAtenha controle quase total sobre um banco de dados (não o servidor), exceto por uma tabela que é usada pelo sa, e por isso sasempre precisará de acesso a essa tabela.

Até agora tenho:

-- executing as sa
CREATE SCHEMA [sa_schema];
CREATE TABLE [sa_schema].[table1] ( ... );
GRANT SELECT , REFERENCES ON OBJECT::[sa_schema].[table1] TO PUBLIC

CREATE USER [UserA] WITHOUT LOGIN;
GRANT CONTROL TO [UserA] WITH GRANT OPTION;
DENY ALTER , DELETE , INSERT , TAKE OWNERSHIP , VIEW CHANGE TRACKING , UPDATE
  ON SCHEMA::[sa_schema] TO [UserA];
DENY ALTER ON USER::[sa] TO [UserA];

Eu pensei que isso seria suficiente, mas acontece que não é. É perfeitamente legal para UserAexecutar:

-- executing as UserA
CREATE ROLE [Denied]
DENY SELECT ON OBJECT::[sa_schema].[table1] TO [Denied]
ALTER ROLE [Denied] ADD MEMBER [sa]

E agora sanão pode mais ler a partir desta tabela.

-- executing as sa
SELECT * FROM [sa_schema].[table1]

Msg 229, Nível 14, Estado 5, Linha 2

A permissão SELECT foi negada no objeto 'table1', banco de dados 'mydb', esquema 'sa_schema'.

Claro, sapoderia consultar o banco de dados para descobrir os papéis aos quais ele foi adicionado e remover-se deles, mas isso parece um kludge e muito trabalho apenas para executar um select. Acho que poderia evitar esse problema certificando-se de UserAque não tem a capacidade de adicionar saa nenhuma função de banco de dados ou garantindo UserAque não possa modificar as permissões neste objeto, portanto, não importa quais funções saseriam adicionadas, nunca haverá um DENYsobre isso objeto.

Alguém tem alguma idéia de como garantir que sempresa terá acesso a esta tabela, independentemente de outras alterações ?UserA

sql-server permissions
  • 3 3 respostas
  • 317 Views

3 respostas

  • Voted
  1. Wes H
    2017-06-06T13:14:30+08:002017-06-06T13:14:30+08:00

    SA é um login como qualquer outro. Você pode querer fazer alguma pesquisa sobre as melhores práticas em relação à conta SA. Não precisa ter superpoderes.

    Os membros da função sysadmin, no entanto, não podem ser bloqueados de nada e os membros dessa função ignoram as verificações de segurança. Se o SA for membro do sysadmin, não deve haver nada que você precise fazer.

    Uma abordagem programática pode ser criar um trabalho do SQL Agent que restaure as associações corretas (de acordo com você) para contas de administrador. Defina isso para ser executado em um cronograma e você terá a garantia de ter as permissões restauradas (a menos que o UserA decida mexer com o trabalho).

    No entanto, isso é realmente mais uma questão de pessoal. As pessoas que têm esse nível de permissão em um servidor devem ser experientes e confiáveis ​​o suficiente para não mexer nas permissões de nível administrativo. Se eles não sabem o que estão fazendo, eles não devem ser capazes de fazê-lo. Se eles sabem o que estão fazendo e fazem de qualquer maneira, você tem um problema diferente. Isso pode ser melhor tratado por uma política de negócios indicando que qualquer pessoa que mexa com permissões de nível administrativo pode estar sujeita a ação disciplinar.

    • 0
  2. Best Answer
    p.s.w.g
    2017-06-06T13:17:01+08:002017-06-06T13:17:01+08:00

    Acho que descobri uma maneira complicada de fazer isso. Eu tenho que mudar DENYpara:

    DENY CONTROL ON SCHEMA::[sa_schema] TO [UserA];
    

    Isso tem dois efeitos:

    • É muito mais difícil UserAselecionar na tabela, apesar de ser pública:

      CREATE USER [foo] WITHOUT LOGIN;
      EXECUTE AS USER = 'foo';
      SELECT * FROM [sa_schema].[table1];
      
    • Não é possível modificar permissões na tabela:

      CREATE ROLE [Denied];
      ALTER ROLE [Denied] ADD MEMBER [sa];                     -- fine
      DENY SELECT ON OBJECT::[sa_schema].[table1] TO [Denied]; -- error
      

      Msg 15151, Nível 16, Estado 1, Linha 16

      Não é possível encontrar o objeto 'table1' porque ele não existe ou você não tem permissão.

    Isso ainda parece um pouco estranho, mas é melhor do que saredefinir suas permissões constantemente.

    • 0
  3. sepupic
    2017-06-06T23:18:22+08:002017-06-06T23:18:22+08:00

    Esta questão é completamente louca a partir de tentativas de dar/negar permissões para sysadmin terminando com manipulações com usuário SA. Não pode haver nenhum usuário SA no banco de dados, você apenas não tem permissão para executar

    create user sa from login sa
    

    Esta tentativa sempre falhará com erro

    Msg 15405, Nível 16, Estado 1, Linha 1

    Não é possível usar o principal especial 'sa'.

    • 0

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve