我在数据库中创建了一个刚创建的新用户。 它不是任何角色的一部分,既不是内置的,也不是用户定义的。
如果我在[sys]架构对象上查看其有效权限:
EXECUTE AS LOGIN = 'Foo';
SELECT * FROM fn_my_permissions('[sys].[sysobjects]', 'OBJECT');
我看到它实际上可以查看SYS模式对象的定义:
entity_name subentity_name permission_name
[sys].[sysobjects] SELECT
[sys].[sysobjects] VIEW DEFINITION
也许在服务器级别上公开授予任何定义? 为什么会这样?
如果我发出DENY VIEW DEF,主要问题就更好了:
DENY VIEW DEFINITION ON SCHEMA::sys to Foo;
它不会消失,用户仍然可以查看SYS OBJECT定义。
如何防止用户查看SYS架构对象的定义。
谢谢, 乔
答案 0 :(得分:0)
在MSDN深处找到答案: https://msdn.microsoft.com/en-us/library/ms176112(v=sql.105).aspx
<强>权限强> 需要成为公共角色的成员。系统对象定义是公开可见的。具有以下任一权限的对象所有者或被授权者可以看到用户对象的定义:ALTER,CONTROL,TAKE OWNERSHIP或VIEW DEFINITION。