Eu tenho vários esquemas de banco de dados como [ext], [stag], etc e, claro, o esquema [dbo] embutido, e também tenho uma função chamada [MyRole].
Meu plano é adicionar [MyRole] à função DDL_ADMIN, para que eles possam criar, alterar, excluir objetos em todos os esquemas, mas desejo impedir que eles façam exatamente isso no esquema [dbo].
A função incorporada DDL_ADMIN fornece as seguintes permissões para seus membros:
ALTER ANY ASSEMBLY
ALTER ANY ASYMMETRIC KEY
ALTER ANY CERTIFICATE
ALTER ANY CONTRACT
ALTER ANY DATABASE DDL TRIGGER
ALTER ANY DATABASE EVENT NOTIFICATION
ALTER ANY DATASPACE
ALTER ANY FULLTEXT CATALOG
ALTER ANY MESSAGE TYPE
ALTER ANY REMOTE SERVICE BINDING
ALTER ANY ROUTE
ALTER ANY SCHEMA
ALTER ANY SERVICE
ALTER ANY SYMMETRIC KEY
CHECKPOINT
CREATE AGGREGATE
CREATE DEFAULT
CREATE FUNCTION
CREATE PROCEDURE
CREATE QUEUE
CREATE RULE
CREATE SYNONYM
CREATE TABLE
CREATE TYPE
CREATE VIEW
CREATE XML SCHEMA COLLECTION
REFERENCES
Como DENY tem precedência sobre GRANT, posso DENY exatamente as mesmas permissões acima no esquema dbo para [MyRole].
Deve ser tão simples quanto:
DENY ALTER ANY ASSEMBLY ON SCHEMA::dbo TO MyRole
DENY ALTER ANY ASYMMETRIC KEY ON SCHEMA::dbo TO MyRole
DENY ALTER ANY CERTIFICATE ON SCHEMA::dbo TO MyRole
DENY ALTER ANY CONTRACT ON SCHEMA::dbo TO MyRole
DENY ALTER ANY DATABASE DDL TRIGGER ON SCHEMA::dbo TO MyRole
DENY ALTER ANY DATABASE EVENT NOTIFICATION ON SCHEMA::dbo TO MyRole
DENY ALTER ANY DATASPACE ON SCHEMA::dbo TO MyRole
DENY ALTER ANY FULLTEXT CATALOG ON SCHEMA::dbo TO MyRole
DENY ALTER ANY MESSAGE TYPE ON SCHEMA::dbo TO MyRole
DENY ALTER ANY REMOTE SERVICE BINDING ON SCHEMA::dbo TO MyRole
DENY ALTER ANY ROUTE ON SCHEMA::dbo TO MyRole
DENY ALTER ANY SCHEMA ON SCHEMA::dbo TO MyRole
DENY ALTER ANY SERVICE ON SCHEMA::dbo TO MyRole
DENY ALTER ANY SYMMETRIC KEY ON SCHEMA::dbo TO MyRole
DENY CHECKPOINT ON SCHEMA::dbo TO MyRole
DENY CREATE AGGREGATE ON SCHEMA::dbo TO MyRole
DENY CREATE DEFAULT ON SCHEMA::dbo TO MyRole
DENY CREATE FUNCTION ON SCHEMA::dbo TO MyRole
DENY CREATE PROCEDURE ON SCHEMA::dbo TO MyRole
DENY CREATE QUEUE ON SCHEMA::dbo TO MyRole
DENY CREATE RULE ON SCHEMA::dbo TO MyRole
DENY CREATE SYNONYM ON SCHEMA::dbo TO MyRole
DENY CREATE TABLE ON SCHEMA::dbo TO MyRole
DENY CREATE TYPE ON SCHEMA::dbo TO MyRole
DENY CREATE VIEW ON SCHEMA::dbo TO MyRole
DENY CREATE XML SCHEMA COLLECTION ON SCHEMA::dbo TO MyRole
DENY REFERENCES ON SCHEMA::dbo TO MyRole
GO
O SQL Server diz "Sintaxe incorreta perto de DENY ALTER ...' para todos os itens acima.
Eu tentei soletrar a sintaxe correta do BOL, mas só consegui:
DENY ALTER ON SCHEMA::dbo TO MyRole;
nada mais.
Qual seria a maneira mais fácil de NEGAR todas as permissões que a associação DDL_ADMIN fornece aos membros [MyRole], mas apenas no [dbo] SCHEMA?
Obrigada!
Algumas das permissões que você está tentando alterar não existem da maneira que você está tentando usá-las.
Por exemplo, para negar
CREATE TABLE
e a maioria das outras instruções DDL, para um esquema específico, a sintaxe e a permissão corretas seriamDENY ALTER ON SCHEMA::dbo TO MyRole
.Isso deve cobrir o equivalente das permissões da função db_ddladmin. (Eu sei que é um pouco menos intuitivo, mas negar tudo
ALTER
, como no meu exemplo acima, inclui negar asCREATE
permissões também.)