Estou assumindo um projeto que envolve a remoção e limitação de permissões de todos os usuários de banco de dados em nosso farm de servidores. (momentos divertidos)
Uma das permissões atualmente limitadas são as permissões db_owner.
Essa permissão está sendo analisada caso a caso, mas uma alteração comum é substituir as permissões db_owner pelo seguinte:
- db_datareader
- db_datawriter
- db_ddladmin
- db_executor
Eu gostaria de definir a diferença exata entre os dois (para informar os clientes).
No entanto, tanto quanto posso dizer, a diferença entre os dois deve ser:
- permissões db_accessadmin
- permissões db_backupoperator
- permissões db_securityadmin
Então, com efeito, eles perderiam:
[ALTER ANY USER]
[CREATE SCHEMA]
[BACKUP DATABASE]
, [BACKUP LOG]
, [CHECKPOINT]
[ALTER ANY APPLICATION ROLE]
,[ALTER ANY ROLE]
[DROP DATABASE]
Existe mais alguma coisa que um usuário perderia quando db_owner for substituído pelas quatro funções acima?
Isso realmente serve muito para um propósito de segurança?
db_ddladmin vs db_owner
Pelo que posso dizer do que testei e li, na maioria das vezes sua lista parece precisa, exceto
db_ddladmin
que permite que vocêCREATE SCHEMA
. Confirmei que as outras permissões de segurança que você listou foram realmente negadas.Negado apenas com DDLADMIN:
[ALTER ANY USER]
[BACKUP DATABASE]
,[BACKUP LOG]
,[CHECKPOINT]
[ALTER ANY APPLICATION ROLE]
,[ALTER ANY ROLE]
[DROP DATABASE]
Observando que o. . .
db_datareader
permitirá oSELECT
acesso a todas as tabelasdb_datarwriter
permitiráINSERT
,UPDATE
eDELETE
acesso a todas as tabelasdb_executor
permitirá oEXECUTE
acesso a todos os objetos executáveisAlém disso, ter permissões de função db_ddladmin pode significar. . .
Os objetos que eles possuem com essa função não serão de propriedade do DBO, portanto, você pode ter que lidar com problemas de mudança de propriedade se houver algum problema com algo nesse nível. Não estou 100% certo de que isso seria um problema, mas vale a pena mencionar apenas no caso.
Fonte: Cadeias de propriedade
Com esta função (pode variar dependendo da versão do SQL Server) eles podem adicionar princípios de segurança SQL definidos no banco de dados atual para objetos que eles possuem ainda, mas nem todos os objetos (aqueles que eles não possuem) nem adicionar um novo servidor -level definido principal para o nível de banco de dados.
Além disso, não ter permissões de função DBO pode significar. . .
Não ter a função DBO pode impedir que certas interfaces GUI do designer do SSMS (variação da versão do SQL Server) sejam preenchidas ou abertas sem erros (por exemplo, ao modificar tabelas ou colunas por meio da GUI) , embora fazê-lo via T-SQL funcione e as permissões estejam em vigor . Em algumas versões do SQL Server, isso pode ser resolvido permitindo
GRANT VIEW DEFINITION
que isso seja um problema e também pode ser apenas um aviso apenas em determinadas versões do SQL Server.Recursos
Você não está conectado como o proprietário do banco de dados ou como um usuário que é membro da função db_owner. Você não poderá salvar alterações em tabelas que não são de sua propriedade.
A função db_ddladmin não permite o uso de funções de "design" no SSMS
outras considerações
Como você afirma que isso está sendo analisado caso a caso
Você já pensou em criar funções personalizadas adicionais para mais acesso em nível de banco de dados "todos os objetos" que cada pessoa precisa, em vez de conceder a
db_ddladmin
função, pois isso provavelmente fornecerá mais do que realmente precisa para objetos de nível de banco de dados também.Eu geralmente dou o que é necessário exatamente e nada mais para eles fazerem seu trabalho e se houver uma necessidade "normal" ou "padrão" de acesso a objetos de nível de banco de dados a todos os objetos em um banco de dados, eu crio uma função de banco de dados personalizada como o
db_executor
mas veja meu exemplo abaixo. Dessa forma, você pode conceder às pessoas o que elas realmente precisam para TODOS os objetos de banco de dados em um banco de dados específico se você não estiver obtendo o nível de objeto explícito em seus bancos de dados para sua segurança.Eu também queria compartilhar uma função db_DDLAdmin_Restriction que você pode considerar criar de outra forma com explícito
DENY
para restringir o quedb_ddladmin
dar acesso para que você possa pelo menos criar isso nos bancos de dados em que você concede essa função e definir o explícitoDENY
para os tipos de objeto reais , etc. você não quer que eles tenham acesso.Por exemplo, se você sabe que eles definitivamente criarão procedimentos e funções armazenados, você pode excluir
DENY CREATE FUNCTION
,DENY CREATE PROCEDURE
,DENY ALTER ANY SCHEMA
.Usando um SQL Script para listar todas as permissões, fui e criei usuários para cada caso.
Em seguida, comparei os resultados e cheguei à lista a seguir, com documentação principalmente do msdn (qualquer citação não especificamente referenciada é do link do msdn).
Abaixo está uma parte da documentação que usei para informar às pessoas que perderiam as permissões do dbo o que exatamente elas estavam perdendo.
ALTERAR
ALTERAR QUALQUER FUNÇÃO DO APLICATIVO
ALTER QUALQUER AUDITORIA DO BANCO DE DADOS
ALTER QUALQUER FUNÇÃO
ALTER QUALQUER USUÁRIO
AUTENTICAR
Encontrado no msdn.
BACKUP LOG DE BACKUP DO BANCO DE DADOS
CONECTAR REPLICA
AO CONTROLE
CRIAR PAPEL
SHOWPLAN
INSCREVA-SE NOTIFICAÇÕES DE CONSULTA
Documentação sobre notificações de consulta.
TOMAR POSSE
VER ESTADO DO BANCO DE DADOS
VER DEFINIÇÃO
Documentação sobre permissões de definição de exibição.