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'
--*/
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容