日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库权限分配探讨

發布時間:2023/12/4 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库权限分配探讨 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上周, 有位朋友給我提出了這樣的需求:區分用戶訪問數據庫的權限。順便總結了下有如下要求:

?

某個用戶查詢所有數據庫的權限

某個用戶只有備份數據庫的權限

給一個用戶只能查看指定數據庫的權限

給一個用戶只有某個表的權限

?

要進行以上任務,首先我們先了解下數據庫的權限相關的內容


主體

“主體” 是可以請求?SQL Server資源的實體。 與?SQLServer授權模型的其他組件一樣,主體也可以按層次結構排列。 主體的影響范圍取決于主體定義的范圍(Windows、服務器或數據庫)以及主體是否不可分或是一個集合。 例如,Windows登錄名就是一個不可分主體,而Windows組則是一個集合主體。 每個主體都具有一個安全標識符(SID)。

Windows級別的主體



Windows域登錄名

Windows?本地登錄名


SQL Server-級的主體


SQL Server登錄名

服務器角色


數據庫級的主體


數據庫用戶

數據庫角色


應用程序角色


SQLServer sa登錄名


SQL Server sa登錄名是服務器級的主體。 默認情況下,該登錄名是在安裝實例時創建的。


public數據庫角色


每個數據庫用戶都屬于?public數據庫角色。 當尚未對某個用戶授予或拒絕對安全對象的特定權限時,則該用戶將繼承授予該安全對象的public角色的權限。


INFORMATION_SCHEMA和?sys


每個數據庫都包含兩個實體:

INFORMATION_SCHEMA和?sys,它們都作為用戶出現在目錄視圖中。這兩個實體是?SQL Server?所必需的。 它們不是主體,不能修改或刪除它們。


基于證書的?SQL Server登錄名


名稱由雙井號?(##)括起來的服務器主體僅供內部系統使用。 下列主體是在安裝?SQL Server時從證書創建的,不應刪除。


##MS_SQLResourceSigningCertificate##

##MS_SQLReplicationSigningCertificate##


##MS_SQLAuthenticatorCertificate##


##MS_AgentSigningCertificate##


##MS_PolicyEventProcessingLogin##


##MS_PolicySigningCertificate##


##MS_PolicyTsqlExecutionLogin##


guest用戶


每個數據庫包括一個guest。 授予guest用戶的權限由對數據庫具有訪問權限,但在數據庫中沒有用戶帳戶的用戶繼承。不能刪除guest用戶,但可通過撤消該用戶的CONNECT權限將其禁用。 可以通過在master或?tempdb以外的任何數據庫中執行?REVOKE CONNECTFROM GUEST來撤消?CONNECT權限。


客戶端和數據庫服務器

根據定義,客戶端和數據庫服務器是安全主體,可以得到保護。 在建立安全的網絡連接前,這些實體之間可以互相進行身份驗證。?SQLServer支持?Kerberos身份驗證協議,該協議定義客戶端與網絡身份驗證服務交互的方式。


創建數據庫用戶

SQL2016中支持11種用戶類型:

用戶基于登錄名在?master這是最常見的用戶類型。



基于登錄名基于的Windows Active Directory帳戶的用戶

CREATE USER [Contoso\Fritz];


基于Windows組的登錄名的用戶。?CREATE USER [Contoso\Sales];


基于使用?SQLServer身份驗證的登錄名的用戶。?CREATE USER Mary;


在數據庫進行身份驗證的用戶建議以幫助使你的數據庫可移植性。


始終允許在?SQL Database。 中包含的數據庫中只允許存在?SQL Server。



基于無登錄名的?Windows用戶的用戶

CREATEUSER [Contoso\Fritz];


基于無登錄名的Windows組的用戶。?CREATE USER [Contoso\Sales];


中的用戶?SQLDatabase或?SQL數據倉庫 基于?Azure Active Directory的用戶。?CREATE USER [Contoso\Fritz] FROMEXTERNAL PROVIDER;


擁有密碼的包含數據庫用戶。?(在中不可用?SQL數據倉庫。)CREATE USER Mary WITHPASSWORD = '********';


基于?Windows主體通過?Windows組登錄名進行連接的用戶



基于無登錄名但可通過Windows組中的成員身份連接到數據庫引擎的Windows用戶的用戶

CREATE USER [Contoso\Fritz];


基于無登錄名但可通過其他Windows組中的成員身份連接到數據庫引擎的Windows組的用戶。?CREATE USER [Contoso\Fritz];


無法進行身份驗證的用戶?這些用戶無法登錄到?SQL Server或?SQL Database。



沒有登錄名的用戶。 不能登錄,但可以被授予權限

CREATE USER CustomAppWITHOUT LOGIN;


基于證書的用戶。 不能登錄,但可以被授予權限,也可以對模塊進行簽名。?CREATE USERTestProcess FOR CERTIFICATE CarnationProduction50;


基于非對稱密鑰的用戶。 不能登錄,但可以被授予權限,也可以對模塊進行簽名。?CREATE User TestProcessFROM ASYMMETRIC KEY PacificSales09;


下面的圖片顯示了創建數據庫用戶需要的選項的含義:


創建用戶可以使用界面完成:



也可以使用T-SQL來進行創建


--?創建登錄名:Test?密碼是:?'123456'.?

CREATELOGIN?Test?

????WITH PASSWORD = '123456';?

GO?

?

上面說完了用戶,下面說下數據庫的角色和權限


服務器級別的權限


SQL Server?提供服務器級角色以幫助你管理服務器上的權限。 這些角色是可組合其他主體的安全主體。服務器級角色的權限作用域為服務器范圍。 (“角色”類似于?Windows?操作系統中的“組”。)


SQL Server?提供了九種固定服務器角色。 無法更改授予固定服務器角色的權限。 從?SQL Server 2012?開始,您可以創建用戶定義的服務器角色,并將服務器級權限添加到用戶定義的服務器角色。


你可以將服務器級主體(SQL Server?登錄名、Windows帳戶和?Windows?組)添加到服務器級角色。 固定服務器角色的每個成員都可以將其他登錄名添加到該同一角色。用戶定義的服務器角色的成員則無法將其他服務器主體添加到角色。


下表顯示了服務器級的固定角色及其權限


下表顯示了固定數據庫角色及其能夠執行的操作。 所有數據庫中都有這些角色。無法更改分配給固定數據庫角色的權限



無法更改分配給固定數據庫角色的權限。 下圖顯示了分配給固定數據庫角色的權限:


SQL 2016有一些數據庫的特殊權限


msdb角色

msdb數據庫中包含下表顯示的特殊用途的角色。

使用R Services

SQL Server(從?SQL Server vNext開始)

安裝?R Services時,其他數據庫角色可用于管理包




下面講如何實現文章前面說的需求:

給某個用戶查詢所有數據庫的權限

給某個用戶只有備份數據庫的權限

給一個用戶只有指定數據庫的權限

給一個用戶只有某個表的權限

給某個用戶查詢所有數據庫的權限


創建一個用戶

?

USE [master] GO CREATE LOGIN [Test1]WITH PASSWORD=N'password@123'?

使用Test1連接數據庫實例


可以看到數據庫列表, 但是無法訪問數據庫,

賦予test1對FinaceDemo的讀取權限

?

USE [FinaceDemo] GO CREATE USER [Test1] FOR LOGIN [Test1] ? ALTER ROLE [db_datareader] ADD MEMBER [Test1] GO


這樣就可以給test1用戶對finacedemo的讀取權限



但是test1 沒有寫入權限



這樣就可以單獨對test1賦予數據庫的讀取權限進行查看操作。


給某個用戶只有備份數據庫的權限


Test1?對于finacedemo無備份權限



賦予備份權限


ALTER ROLE [db_backupoperator] ADD MEMBER [Test1]


給一個用戶只有指定數據庫的權限


我們需要Test1只能看到?FinanceDemo,其他所有數據庫都不能看到


執行下面腳本

?

USE [master] ?Deny VIEW any DATABASE TO Test1; go?

運行后的效果


Test1 連接后看不到任何數據庫

執行:


ALTER AUTHORIZATIONON DATABASE::FinanceDemo TO test1

完成后結果:



Test1能查看到賦予權限的數據庫


給一個用戶只有某個表的權限

創建測試用戶test3


USE [master] GO CREATE LOGIN [Test3] WITH PASSWORD=N'password@123' -----賦予test2可以登錄testDB USE [testdb] GO CREATE USER [Test3] FOR LOGIN [Test3] GO?


賦予test3對于t2表的update和select權限 grant update on dbo.t2to test3 grant select on dbo.t2to test3 ? use testDB ? 查看test3用戶獲得的權限 exec sp_helprotect @username='test3'



可以看到用戶test3擁有了t2的select和update權限


執行select * from t2



執行插入操作失敗。




以上介紹了對數據庫權限細致的管理,更加詳細的控制可以參考technet上面的信息。


權限管理非常復雜,以上只是做了簡單的介紹。需要更加詳細的內容,需要自己去研究。在technet上可以找到更加詳細的信息。


原文地址:https://espider.github.io/CLR/inheritance-polymorphism/


.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

內容轉載自公眾號

微軟中國MSDN 了解更多

總結

以上是生活随笔為你收集整理的数据库权限分配探讨的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。