原創鏈接:https://www.cnblogs.com/junfly/articles/2798023.html
SQL SERVER 基礎教程中關於服務器登錄名、服務器角色、數據庫用戶、數據庫角色、架構的關系。
我們要說的包括服務器登錄名Server Login,服務器角色Server Role,數據庫用戶DB User,數據庫架構DB Schema,數據庫角色DB Role 。以上幾個名詞應該從服務器與數據庫來區分,服務器包含一到多個數據庫,其中:
服務器登錄名,指有權限登錄到某服務器的用戶;
服務器角色,指一組固定的服務器用戶,默認有9組;
- 登錄名一定屬於某些角色,默認為public
- 服務器角色不容許更改
- 登錄后也不一定有權限操作數據庫
數據庫用戶,指有權限能操作數據庫的用戶;
數據庫角色,指一組固定的有某些權限的數據庫角色;
數據庫架構,指數據庫對象的容器;
- 數據庫用戶對應於服務器登錄名以便登錄者可以操作數據庫
- 數據庫角色可以添加,可以定制不同權限
- 數據庫架構,類似於數據庫對象的命名空間,用戶通過架構訪問數據庫對象
而通過下圖可以讓這些概念清晰一些:
即:
- 服務器登錄名屬於某組服務器角色;
- 服務器登錄名需要於數據庫的用戶映射后才擁有操作數據庫的權限
- 數據庫用戶屬於某組數據庫角色以獲取操作數據庫的權限
- 數據庫角色擁有對應的數據庫架構,數據庫用戶可以通過角色直接擁有架構
- 數據庫用戶有默認架構,寫SQL語句可以直接以“對象名”訪問
- 非默認架構則要以“架構名.對象名”訪問
因此,新建一個非SA賬戶並建立數據庫的過程可以如下:
1、新建登錄名Login1
2、新建數據庫DB1
3、新建DB1的架構Schema1
使用 SQL Server Management Studio 創建架構
-
在 SQL Server Management Studio 中,打開對象資源管理器,然后展開“數據庫”文件夾。
-
展開要在其中創建新數據庫架構的數據庫。
-
右鍵單擊“安全性”文件夾,指向“新建”,然后單擊“架構”。
-
在“常規”頁上的“架構名稱”框中輸入新架構的名稱。
-
在“架構所有者”框中,輸入要擁有該架構的數據庫用戶或角色的名稱。
-
單擊“確定”。
4、新建BD1的用戶User1,登錄名對應Login1,默認架構選擇Schema1,角色選擇db_owner
使用 SQL Server Management Studio 創建用戶
-
在 SQL Server Management Studio 中,打開對象資源管理器,然后展開“數據庫”文件夾。
-
展開要在其中創建新數據庫架構的數據庫。
-
右鍵單擊“安全性”文件夾,指向“新建”,然后單擊“用戶”。
-
在“常規”頁上的“用戶名”框中輸入”用戶名“。
- 選擇登錄名 如下圖
- 選擇默認的建構 如下圖
- 單擊“確定”。
5、在登錄名Login1的屬性窗口里選擇“用戶映射”,勾選DB1,在用戶里填寫User1,默認架構選擇"Schema1"
6、至此,新建表名會是Schema1.Table1,其他對象也如此
7、當然還可以新建其他架構的對象Schema2,只有User1擁有該架構,一樣可以訪問,如Schema2.Table2
值得注意的是,當為登錄映射數據庫用戶的時候,多個數據庫可以有相同名稱的用戶,而單獨為某個數據庫新建的用戶,如User1,則在其他數據庫里不允許同名。