Sql Server-單獨(dú)創(chuàng)建某張表的只讀權(quán)限賬戶

--創(chuàng)建角色 role_test
EXEC sp_addrole 'role_test'

--添加登錄 login_test,設(shè)置密碼為Test123,默認(rèn)數(shù)據(jù)庫為測試庫
EXEC sp_addlogin 'login_test','Test123','測試庫'

--為登錄 login_test 在數(shù)據(jù)庫 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 權(quán)限
GRANT SELECT ON [dbo].[Table_test] TO role_test

下面是擴(kuò)展示例:

GO
/*--示例說明
        示例在數(shù)據(jù)庫中創(chuàng)建一個(gè)擁有表[dbo].[Table_test]的所有權(quán)限、擁有表[dbo].[Table_test2]的SELECT權(quán)限的角色role_test
    隨后創(chuàng)建了一個(gè)登錄login_test,然后在數(shù)據(jù)庫測試庫中為登錄login_test創(chuàng)建了用戶賬戶user_test
    同時(shí)將用戶賬戶user_test添加到角色role_test中,使其通過權(quán)限繼承獲取了與角色role_test一樣的權(quán)限
    最后使用DENY語句拒絕了用戶賬戶user_test對表[dbo].[Table_test]的SELECT權(quán)限。
    經(jīng)過這樣的處理,使用login_test登錄SQL Server實(shí)例后,它只具有表[dbo].[Table_test2]的select權(quán)限和對表[dbo].[Table_test]出select外的所有權(quán)限。
--*/
GO

/*-- 
USE [測試庫]
 
--創(chuàng)建角色 role_test
EXEC sp_addrole 'role_test'
 
--添加登錄 login_test,設(shè)置密碼為Test123,默認(rèn)數(shù)據(jù)庫為測試庫
EXEC sp_addlogin 'login_test','Test123','測試庫'
 
--為登錄 login_test 在數(shù)據(jù)庫 pubs 中添加安全賬戶 user_test
EXEC sp_grantdbaccess 'login_test','user_test'
 
--添加 user_test 為角色 role_test 的成員
EXEC sp_addrolemember 'role_test','user_test'
 
 
--用login_test登陸,發(fā)現(xiàn)在SSMS中找不到仍和表,因此執(zhí)行下述兩條語句出錯(cuò)。
select * from [dbo].[Table_test2]
select * from [dbo].[Table_test]
 
--授予角色 role_test 對 [dbo].[Table_test] 表的所有權(quán)限
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 權(quán)限已不再推薦使用,并且只保留用于兼容性目的。它并不表示對實(shí)體定義了 ALL 權(quán)限。
 
--測試可以查詢表[dbo].[Table_test],但是別的表無法查詢
select * from [dbo].[Table_test]
 
 
--如果要收回權(quán)限,可以使用如下語句。(可選擇執(zhí)行)
revoke all on [dbo].[Table_test] from role_test
--ALL 權(quán)限已不再推薦使用,并且只保留用于兼容性目的。它并不表示對實(shí)體定義了 ALL 權(quán)限。
 
 
--授予角色 role_test 對 [dbo].[Table_test2] 表的 SELECT 權(quán)限
GRANT SELECT ON [dbo].[Table_test2] TO role_test
 
--用login_test登陸,發(fā)現(xiàn)可以查詢[dbo].[Table_test2]和[dbo].[Table_test]兩張表
select * from [dbo].[Table_test2]
select * from [dbo].[Table_test]
 
--拒絕安全賬戶 user_test 對 [dbo].[Table_test] 表的 SELECT 權(quán)限
DENY SELECT ON [dbo].[Table_test] TO user_test
 
--再次執(zhí)行查詢[dbo].[Table_test]表的語句,提示:拒絕了對對象 'Table_test' (數(shù)據(jù)庫 '測試庫',架構(gòu) 'dbo')的 SELECT 權(quán)限。
select * from [dbo].[Table_test]
 
--重新授權(quán)
GRANT SELECT ON [dbo].[Table_test] TO user_test
 
--再次查詢,可以查詢出結(jié)果。
select * from [dbo].[Table_test]
 
 
USE 測試庫
--從數(shù)據(jù)庫中刪除安全賬戶,failed
EXEC sp_revokedbaccess 'user_test'
--刪除角色 role_test,failed
EXEC sp_droprole 'role_test'
--刪除登錄 login_test,success
EXEC sp_droplogin 'login_test'
--*/
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容