Percebi que posso criar tabelas, esquemas, procedimentos armazenados etc. no banco de dados mestre .
Não sei o que está concedendo essa permissão. É chato, porque quando abrimos um arquivo *.sql no SSMS, ele está relacionado por padrão ao master . Se uma CREATE
operação for executada sem perceber e definir o contexto correto do banco de dados, a tabela será criada no master .
Se não tivéssemos a permissão, receberíamos um erro, notamos e alteramos o contexto do banco de dados. Com a permissão, a tabela é criada e só vemos o erro depois, sendo necessário descartá-la e recriá-la. Percebi que já existem algumas tabelas criadas por engano no master .
Quero revogar essa permissão de todos os usuários humanos, mas tenho medo de quebrar alguma coisa. Não sei se alguma rotina do SQL Server precisa de permissão para criar ali.
Qual é a melhor maneira de revogar a permissão de criação do mestre sem interromper o SQL Server?
Você precisará determinar como os logins têm acesso para executar o DDL no mestre. A consulta a seguir retornará uma lista de logins com associação de função no nível do servidor:
Você pode usar
xp_logininfo
para entender como uma determinada conta do Windows tem acesso ao SQL Server:Se as pessoas em questão tiverem participação na
sysadmin
função, você não poderá impedi-las de executar instruções DDLmaster
(ou em qualquer outro lugar).Presumindo que as pessoas não sejam membros da função de
sysadmin
servidor, asDENY
permissões terão precedência sobre as permissões que foramGRANTed
.Você pode criar um grupo de segurança do Windows chamado "NoMasterDDL" e adicionar seus desenvolvedores a esse grupo. Crie um login para o grupo e, em seguida,
DENY
permissões nas instruções DDL que você não deseja que as pessoas executem no mestre.O acima impedirá que os membros do
[DOMAIN\NoMasterDDL]
grupo executem qualquer instrução do tipo DDL, comoCREATE TABLE
.Como eu disse em resposta à sua pergunta anterior , e AMtwo mencionou em um comentário:
Se um usuário for atualmente um membro do sysadmin , quaisquer
DENY
permissões não terão efeito. Particularmente em um ambiente de desenvolvimento, os desenvolvedores podem ter esse acesso. Nesse caso, aCONTROL SERVER
permissão pode ser usada; é o mesmo que sysadmin , mas obedece àsDENY
permissões.Portanto, você pode conceder
CONTROL SERVER
em vez de torná-los membros da função de servidor sysadminDENY ALTER
e, em seguida, usar como mostrado acima para evitar DDL no banco de dados mestre .