SQL Server 登錄名、用戶、角色與權限


1.在SQL Server中,用戶和角色是分為服務器級別和數據庫級別的

2.服務器級別

登錄名:指有權限登錄到某服務器的用戶,例如超級管理員的登錄名是sa;

              登錄名具體位置在  數據庫——>安全性——>登錄名

              

 

服務器角色:為幫助您管理服務器上的權限,SQL Server 提供了若干角色,這些角色是用於對其他主體進行分組的安全主體。 服務器級角色
的權限作用域為服務器范圍。SQL Server 提供了九種固定服務器角色, 無法更改授予固定服務器角色的權限,這9組角色分別如下:
sysadmin         —— 在SQL Server中進行任何活動,該角色的權限跨越所有其它固定服務器角色
serveradmin   —— 更改服務器范圍內的配置選項並關閉服務器
setupadmin     —— 添加和刪除鏈接服務器,並執行某些系統存儲過程(如 sp_serveroption)
securityadmin —— 授予數據庫引擎的訪問權限和配置用戶權限的能力使得安全管理員可以分配大多數服務器權限,securityadmin 角色應視為與sysadmin 角色等效
processadmin   —— 管理在 SQL Server 實例中運行的進程
dbcreator          —— 創建和改變數據庫,但是沒有讀取權限
diskadmin          —— 管理磁盤文件
bulkadmin          —— 執行 BULK INSERT 語句
public                 —— 每個 SQL Server 登錄名均屬於 public 服務器角色。 如果未向某個服務器主體授予或拒絕對某個安全對象的特定權
限,該用戶將繼承授予該對象的 public 角色的權限。當您希望該對象對所有用戶可用時,只需對任何對象分配 public 權限即可。
您無法更改 public 中的成員關系。public 的實現方式與其他角色不同,但是,可以從 public 授予、拒絕或撤銷權限。

           服務器角色具體位置在  數據庫——>安全性——>服務器角色

           

 

注意
>>登錄名一定屬於某些角色,默認為public
>>服務器角色不容許更改
>>登錄后也不一定有權限操作數據庫

3.數據庫級別

用戶:指有權限能操作數據庫的用戶;

          用戶具體位置在  數據庫——>某個具體庫——>安全性——>用戶

         

 

        

數據庫角色:SQL Server 中有兩種類型的數據庫級角色:數據庫中預定義的“固定數據庫角色”和您可以創建的“靈活數據庫角色”
固定的有某些權限的數據庫角色,所有數據庫中都有這些角色,默認有10個,分別如下;

public
--public 角色是一個特殊的數據庫角色,每個數據庫用戶都屬於它。public 角色:
 >>捕獲數據庫中用戶的所有默認權限。
 >>無法將用戶、組或角色指派給它,因為默認情況下它們即屬於該角色。
 >>包含在每個數據庫中,包括 master、msdb、tempdb、model 和所有用戶數據庫。
 >>無法除去。

db_owner
--進行所有數據庫角色的活動,以及數據庫中的其它維護和配置活動。
--該角色的權限跨越所有其它固定數據庫角色。

db_accessadmin
--在數據庫中添加或刪除 Windows NT 4.0 或 Windows 2000 組和用戶以及 SQL Server 用戶。

db_datareader
--查看來自數據庫中所有用戶表的全部數據。

db_datawriter
--添加、更改或刪除來自數據庫中所有用戶表的數據

db_ddladmin
--添加、修改或除去數據庫中的對象(運行所有 DDL)

db_securityadmin
--管理 SQL Server 2000 數據庫角色的角色和成員,並管理數據庫中的語句和對象權限

db_backupoperator
--有備份數據庫的權限

db_denydatareader
--拒絕選擇數據庫數據的權限

db_denydatawriter
--拒絕更改數據庫數據的權限

        數據庫角色具體位置在  數據庫——>某個具體庫——>安全性——>角色——>數據庫角色

       

 

注意:請不要將靈活數據庫角色添加為固定角色的成員,這會導致意外的權限升級。

 

架構:架構(Schema)是一組數據庫對象的集合,它被單個負責人(可以是用戶或角色)所擁有並構成唯一命名空間。可以將架 

構看成是對象的容器。

 >>數據庫用戶對應於服務器登錄名以便登錄者可以操作數據庫
 >>數據庫角色可以添加,可以定制不同權限  
 >>數據庫架構,類似於數據庫對象的命名空間,用戶通過架構訪問數據庫對象

      架構數據庫角色具體位置在  數據庫——>某個具體庫——>安全性——>架構

      

 

4.數據庫級別設置

服務器級 -> 數據庫級 -> 架構級 - > 數據對象級,比如說:Server.DataBase1.dbo.Table1;這里的意思就是Table1這個表屬於dbo這
個架構,dbo這個架構屬於DataBase1這個數據庫,DataBase1這個數據庫屬於Server這個服務器。里面的架構其實就是一個容器,好像
就是面向對象里面的命名空間,一個用戶可以擁有多個架構,但是不能對沒有擁有的架構進行操作。一個數據庫角色,是對不同架構里
面數據對象的權限組織,也有可能涉及到多個架構,當某一個用戶被轉換成一種數據庫角色的時候,假如這個用戶本身不擁有某一個架
構而該數據庫角色擁有,那它當它對那個架構進行操作的時候就會出錯。

5.相互之間的關系

(1)登錄名與數據庫用戶在服務器級別是一對多的,在數據庫級別是一對一的
    登錄名可以理解為進入整個大樓的鑰匙,用戶名可以理解為一個房間的鑰匙,這里所說的大樓就是sql server服務器,而房間就是
這個sql server服務器中的具體的庫,要注意登錄名是存在於master數據庫的syslogins表中,用戶名是在各個具體的庫下建立的(也就
是要先進入各個庫), 最關鍵的是:一個登錄名可以和多個不同庫下的用戶做映射,但是在同一個庫下只能和一個用戶做映射,並且一
個用戶名可以和多個登錄名有映射關系, 真正有權限的是用戶名,只不過是用登錄名去登進數據庫,然后去找映射的用戶名,這樣就
有了相應的權限,剛開始建立的登錄名只要把該登錄名的服務器角色設置為Database Creator,就可以創建新的數據庫了,並且新建立
的這個數據庫中會自動生成兩個用戶名:dbo和guest。並且剛剛建立的登錄名就和dbo映射了,還有就是rbo也和sa映射了,因為sa作為
管理員的登錄名和每個庫中的rbo用戶映射。

(2)一個數據庫角色有可能涉及多個架構,數據庫角色對應的是權限
(3)一個用戶對應一個數據庫角色
(4)一個數據庫用戶可以對應多個架構(架構是表容器),架構里面包含的是數據庫表。

6.用T_SQL創建用戶和登錄用戶例子

-- 1.創建登錄用戶(在master庫下面執行)
USE master
GO
CREATE LOGIN readonlylogin WITH password='abc123...';

-- 2.創建數據庫只讀用戶(在某個用戶數據庫下面執行)
USE TestDB
GO
CREATE USER readonlyuser FROM LOGIN readonlylogin;

-- 3.將用戶加入數據庫角色,例如 所有者角色db_owner、只讀角色db_datareader等(在某個用戶數據庫下面執行)
USE TestDB
GO
EXEC sp_addrolemember 'db_datareader', 'readonlyuser';

--EXEC sp_addrolemember 'db_owner', 'readonlyuser';----可以將用戶關聯到多個數據庫角色中

--EXEC sp_droprolemember 'db_owner', 'readonlyuser'----從特定的數據角色中刪除用戶

-- 4.用我們剛剛創建的readonlylogin用戶進行登錄,登錄時要注意將“選項(英文是Options)-->連接屬性(Connection Properties)-->連接數據庫(Connect to database)”改為我們的目標數據庫例如TestDB下面

  注意

  1.登錄名和用戶名可以起一樣的名字;

  2.如果是在普通的SQL Server中,就按上面操作即可,如果微軟雲Azure中的SQL Server,可能有些語句不能用,例如use master,default_schema=dbo等

 

 

參考地址:

https://blog.csdn.net/dawn4317/article/details/51338166

https://www.2cto.com/database/201712/707297.html

https://yq.aliyun.com/articles/381724

http://www.cnblogs.com/xwdreamer/archive/2012/06/25/2562828.html

https://blog.csdn.net/cjh200102/article/details/7359874


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM