在较低级别覆盖DENY权限

时间:2015-07-28 12:34:33

标签: sql sql-server sql-server-2008 tsql security

我在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视图覆盖它?

谢谢 乔

1 个答案:

答案 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'是您希望能够查看参数信息的实际用户。实际上,在过程的上下文中,您获得了提升的权限(无论授予与签名证书关联的用户的权限)。