【发布时间】:2014-09-21 07:37:57
【问题描述】:
我创建了一个新类型和一个新用户:
CREATE TYPE dbo.MY_TYPE FROM varchar (128) NULL
GO
CREATE USER MyUser WITHOUT LOGIN;
GO
如果我不授予该用户对我的类型的任何权限,那么我看不到该类型的定义:
EXECUTE AS USER = 'MyUser';
GO
SELECT * FROM sys.types where name = 'MY_TYPE';
--returns nothing
REVERT
GO
根据BOL:
授予个别实体的查看定义允许被授予者 查看指定实体的元数据。
所以,如果我授予 VIEW DEFINITION 权限:
GRANT VIEW DEFINITION ON TYPE::dbo.MY_TYPE TO MyUser;
然后重复测试,我从 sys.types 获得信息。没关系。
问题是为什么我可以通过授予 REFERENCES 权限来解决该问题?
REVOKE VIEW DEFINITION ON TYPE::dbo.MY_TYPE FROM MyUser;
GRANT REFERENCES ON TYPE::dbo.MY_TYPE TO MyUser;
GO
EXECUTE AS USER = 'MyUser';
GO
SELECT * FROM sys.types where name = 'MY_TYPE';
--see the result here!!!
REVERT
GO
【问题讨论】:
标签: sql-server security