REVOKE 数据库级别 DENY VIEW DEFINITION 对象级别
REVOKE database level DENY VIEW DEFINITION on object level
SQL Server 2008 R2环境:
我们有以下说法:
DENY VIEW DEFINITION TO Foo;
这在数据库级别上运行,因此它将拒绝对数据库中所有对象的 VIEW DEFINITION 权限。
到目前为止很清楚。
如果对于该数据库中的一个对象,您仍然希望 Foo 用户能够查看定义怎么办?
我试图在对象级别上取消数据库级别的拒绝:
REVOKE VIEW DEFINITION ON OBJECT::[dbo].[storedProcFoo] FROM Foo;
用户仍然无法查看定义。
我试图在对象级别重新授予它:
GRANT VIEW DEFINITION ON OBJECT::[dbo].[storedProcFoo] TO Foo;
用户仍然无法查看定义。 (我知道我在数据库级别有一个 DENY,它优先,所以我真的没想到它会像这样工作)
逻辑上它应该工作:
在数据库级别拒绝查看 DEF,
然后撤销对数据库中少数异常对象的拒绝。
我在这里错过了什么?
请不要告诉我我必须拒绝所有单个对象的 VIEW DEF :)
请注意 DENY
和 REVOKE
是不同的东西。 DENY
是对指定权限的明确拒绝,而 REVOKE
删除先前授予的 GRANT
或 DENY
。如果确切的指定权限尚不存在,则 REVOKE
无效。您的第一个 REVOKE 没有效果,因为您从未在对象级别授予权限。
当 GRANT
和 DENY
权限存在冲突时,DENY
优先。如果您选择授予更高级别的 VIEW DEFINITION
,则必须对特定对象异常使用 DENY
,或者在对象级别仅对所需对象使用 GRANT
权限。
为避免这种情况并减少维护,您可以在模式级别授予 VIEW DEFINITION
并在不同的模式中创建您不希望 VIEW DEFINITION
的过程。 GRANT
不会通过这种方法继承,您可以完全避免拒绝。就个人而言,我认为最好尽可能避免使用 DENY
。
SQL Server 2008 R2环境:
我们有以下说法:
DENY VIEW DEFINITION TO Foo;
这在数据库级别上运行,因此它将拒绝对数据库中所有对象的 VIEW DEFINITION 权限。
到目前为止很清楚。
如果对于该数据库中的一个对象,您仍然希望 Foo 用户能够查看定义怎么办?
我试图在对象级别上取消数据库级别的拒绝:
REVOKE VIEW DEFINITION ON OBJECT::[dbo].[storedProcFoo] FROM Foo;
用户仍然无法查看定义。
我试图在对象级别重新授予它:
GRANT VIEW DEFINITION ON OBJECT::[dbo].[storedProcFoo] TO Foo;
用户仍然无法查看定义。 (我知道我在数据库级别有一个 DENY,它优先,所以我真的没想到它会像这样工作)
逻辑上它应该工作: 在数据库级别拒绝查看 DEF, 然后撤销对数据库中少数异常对象的拒绝。
我在这里错过了什么? 请不要告诉我我必须拒绝所有单个对象的 VIEW DEF :)
请注意 DENY
和 REVOKE
是不同的东西。 DENY
是对指定权限的明确拒绝,而 REVOKE
删除先前授予的 GRANT
或 DENY
。如果确切的指定权限尚不存在,则 REVOKE
无效。您的第一个 REVOKE 没有效果,因为您从未在对象级别授予权限。
当 GRANT
和 DENY
权限存在冲突时,DENY
优先。如果您选择授予更高级别的 VIEW DEFINITION
,则必须对特定对象异常使用 DENY
,或者在对象级别仅对所需对象使用 GRANT
权限。
为避免这种情况并减少维护,您可以在模式级别授予 VIEW DEFINITION
并在不同的模式中创建您不希望 VIEW DEFINITION
的过程。 GRANT
不会通过这种方法继承,您可以完全避免拒绝。就个人而言,我认为最好尽可能避免使用 DENY
。