Sql Server-单独创建某张表的只读权限账户

--创建角色 role_test
EXEC sp_addrole 'role_test'

--添加登录 login_test,设置密码为Test123,默认数据库为测试库
EXEC sp_addlogin 'login_test','Test123','测试库'

--为登录 login_test 在数据库 pubs 中添加安全账户 user_test
EXEC sp_grantdbaccess 'login_test','user_test'

--添加 user_test 为角色 role_test 的成员
EXEC sp_addrolemember 'role_test','user_test'

--授予角色 role_test 对 [dbo].[Table_test2] 表的 SELECT 权限
GRANT SELECT ON [dbo].[Table_test] TO role_test

下面是扩展示例:

GO
/*--示例说明
        示例在数据库中创建一个拥有表[dbo].[Table_test]的所有权限、拥有表[dbo].[Table_test2]的SELECT权限的角色role_test
    随后创建了一个登录login_test,然后在数据库测试库中为登录login_test创建了用户账户user_test
    同时将用户账户user_test添加到角色role_test中,使其通过权限继承获取了与角色role_test一样的权限
    最后使用DENY语句拒绝了用户账户user_test对表[dbo].[Table_test]的SELECT权限。
    经过这样的处理,使用login_test登录SQL Server实例后,它只具有表[dbo].[Table_test2]的select权限和对表[dbo].[Table_test]出select外的所有权限。
--*/
GO

/*-- 
USE [测试库]
 
--创建角色 role_test
EXEC sp_addrole 'role_test'
 
--添加登录 login_test,设置密码为Test123,默认数据库为测试库
EXEC sp_addlogin 'login_test','Test123','测试库'
 
--为登录 login_test 在数据库 pubs 中添加安全账户 user_test
EXEC sp_grantdbaccess 'login_test','user_test'
 
--添加 user_test 为角色 role_test 的成员
EXEC sp_addrolemember 'role_test','user_test'
 
 
--用login_test登陆,发现在SSMS中找不到仍和表,因此执行下述两条语句出错。
select * from [dbo].[Table_test2]
select * from [dbo].[Table_test]
 
--授予角色 role_test 对 [dbo].[Table_test] 表的所有权限
GRANT ALL ON [dbo].[Table_test] TO role_test
--The ALL permission is deprecated and maintained only for compatibility. 
--It DOES NOT imply ALL permissions defined on the entity.
--ALL 权限已不再推荐使用,并且只保留用于兼容性目的。它并不表示对实体定义了 ALL 权限。
 
--测试可以查询表[dbo].[Table_test],但是别的表无法查询
select * from [dbo].[Table_test]
 
 
--如果要收回权限,可以使用如下语句。(可选择执行)
revoke all on [dbo].[Table_test] from role_test
--ALL 权限已不再推荐使用,并且只保留用于兼容性目的。它并不表示对实体定义了 ALL 权限。
 
 
--授予角色 role_test 对 [dbo].[Table_test2] 表的 SELECT 权限
GRANT SELECT ON [dbo].[Table_test2] TO role_test
 
--用login_test登陆,发现可以查询[dbo].[Table_test2]和[dbo].[Table_test]两张表
select * from [dbo].[Table_test2]
select * from [dbo].[Table_test]
 
--拒绝安全账户 user_test 对 [dbo].[Table_test] 表的 SELECT 权限
DENY SELECT ON [dbo].[Table_test] TO user_test
 
--再次执行查询[dbo].[Table_test]表的语句,提示:拒绝了对对象 'Table_test' (数据库 '测试库',架构 'dbo')的 SELECT 权限。
select * from [dbo].[Table_test]
 
--重新授权
GRANT SELECT ON [dbo].[Table_test] TO user_test
 
--再次查询,可以查询出结果。
select * from [dbo].[Table_test]
 
 
USE 测试库
--从数据库中删除安全账户,failed
EXEC sp_revokedbaccess 'user_test'
--删除角色 role_test,failed
EXEC sp_droprole 'role_test'
--删除登录 login_test,success
EXEC sp_droplogin 'login_test'
--*/

你可能感兴趣的:(Sql Server-单独创建某张表的只读权限账户)