我在SQL Server 2008 R2上。
我不得不在用户的数据库级别上查看定义。
DENY VIEW DEFINITION TO myUser1;
这样可行,因为myUser1在查询INFORMATION_SCHEMA视图时不再返回任何行。
问题是,myUser1仍需要查询INFORMATION_SCHEMA.PARAMETERS视图,但无法访问任何其他INFORMATION SCHEMA视图。
如果我在INFORMATION_SCHEMA.PARAMETERS上发出REVOKE或GRANT返回VIEW DEFINITION权限,则用户仍然无法取回任何行。 我知道在更高级别上有一个DENY,它会覆盖我在较低级别所做的任何事情。 还有,还有办法吗? 在数据库级别上有DENY VIEW DEFINITION,并为一个特定的INFORMATION_SCHEMA视图覆盖它?
谢谢 乔
答案 0 :(得分:1)
我无法覆盖拒绝,但我可以覆盖缺少资助。
CREATE PROCEDURE dbo.getDefinitions
AS
BEGIN
SELECT * FROM [INFORMATION_SCHEMA].[PARAMETERS] AS [p];
END
GO
CREATE CERTIFICATE signingCert
ENCRYPTION BY PASSWORD = 'gr00vyp@ss!'
WITH SUBJECT = 'Code signing certificate',
EXPIRY_DATE = '2099-01-01'
GO
ADD SIGNATURE TO dbo.[getDefinitions]
BY CERTIFICATE signingCert
WITH PASSWORD = 'gr00vyp@ss!'
CREATE USER viewDefinitionUser FROM CERTIFICATE signingCert
GRANT VIEW DEFINITION TO viewDefinitionUser
GRANT EXECUTE ON dbo.[getDefinitions] TO [foobar];
go
foobar'是您希望能够查看参数信息的实际用户。实际上,在过程的上下文中,您获得了提升的权限(无论授予与签名证书关联的用户的权限)。