DENY AND REVOKE
-
Tuesday, November 27, 2012 4:08 AM
Hi,
What is the difference between DENY AND REVOKE in SQL SERVER 2005 Security?
Please explain with examples.
All Replies
-
Tuesday, November 27, 2012 4:52 AM
Hello,
GRANT gives explicit permissions, DENY denies explicit permissions and REVOKE removes GRANT/DENY permissions settings; see REVOKE Server Permissions (Transact-SQL)
Olaf Helper
Blog Xing -
Tuesday, November 27, 2012 4:59 AMModerator
DENY prevents a principal from inheriting permissions from role or group membership. REVOKE removes a previous GRANT or DENY permission.
See the SQL Server Books Online for details on DENY (http://msdn.microsoft.com/en-us/library/ms188338.aspx) and REVOKE (http://msdn.microsoft.com/en-us/library/ms187719.aspx). Examples below.
USE tempdb; GO CREATE ROLE TestRole; CREATE USER TestUser WITHOUT LOGIN; ALTER ROLE TestRole ADD MEMBER TestUser; GO CREATE TABLE dbo.Test(Col1 int); GO --this fails because TestUser has no permissions on table dbo.Test EXECUTE AS USER = 'TestUser'; GO SELECT * FROM dbo.Test; GO REVERT; GO --grant permissions to user GRANT SELECT ON dbo.Test TO TestUser; GO --this succeeds because TestUser now has SELECT permission EXECUTE AS USER = 'TestUser'; GO SELECT * FROM dbo.Test; GO REVERT; GO --remove permission from user REVOKE SELECT ON dbo.Test FROM TestUser; GO --this fails because TestUser no longer has SELECT permission EXECUTE AS USER = 'TestUser'; GO SELECT * FROM dbo.Test; GO REVERT; GO --grant permissions to role GRANT SELECT ON dbo.Test TO TestRole; GO --this succeeds because TestUser inherits SELECT permission due to role membership EXECUTE AS USER = 'TestUser'; GO SELECT * FROM dbo.Test; GO REVERT; GO --deny permissions to TestUser DENY SELECT ON dbo.Test TO TestUser; GO --this fails because TestUser no longer inherits SELECT permission - deny takes precedence over grant EXECUTE AS USER = 'TestUser'; GO SELECT * FROM dbo.Test; GO REVERT; GO --remove deny permission REVOKE SELECT ON dbo.Test FROM TestUser; GO --this succeeds because deny was removed; SELECT permission is again inherited EXECUTE AS USER = 'TestUser'; GO SELECT * FROM dbo.Test; GO REVERT; GO DROP TABLE dbo.Test; DROP USER TestUser; DROP ROLE TestRole; GO
Dan Guzman, SQL Server MVP, http://weblogs.sqlteam.com/dang/
- Marked As Answer by KIRAN KUAMR Tuesday, November 27, 2012 5:33 AM

