SQL Azure 工作積累(1)——添加用戶到Azure SQL DB

本系列打算用於記錄本人在工作中使用到Azure的功能,主要記錄與本地SQL Server或者其他比較不一樣的地方,不過由於每個人對工具軟件的熟悉程度和側重點不一樣,所以無法覆蓋所有讀者的需求。

前言

  第一篇文章記錄的是關於Azure SQL DB的用戶,在非PaaS版本中,我們通常都使用SSMS來創建和管理登錄名和用戶。不過對於PaaS,就有點不同。
  因爲PaaS在界面和權限上跟非PaaS的有比較大的差異,所以假設你不用用到sa這種級別的賬號,那麼在Azure SQL DB中應該怎麼進行登陸和用戶的管理呢?
  在非PaaS環境中,你會有一個登錄名(login)用來登錄SQL Server,可以是SQL 身份驗證或者是Windows身份驗證甚至AD域賬號認證(實際上就是一種Windows身份驗證),登錄名只是讓你訪問SQL Server,但是不能直接使用裏面的數據庫,爲了達到這個目的,就出現了“用戶(users)”,用戶就是把登錄名通過指定特定的安全組,並映射到獨立數據庫中,使其可以真正使用數據庫,並且不用使用登錄名登陸SQL Server然後又要使用用戶名訪問特定數據庫。

形象點來說,登錄名就是允許你進入一個酒店裏面,可以在大堂或者走廊走動,但是你不能進入客房,直到你獲得允許,這個時候你就變成了一個用戶,可以進入特定的客房。
PaaS和非PaaS的差異

平臺差異

  兩種不同的平臺,在服務器和數據庫層面的安全性有相似的地方,也有一些不同的地方,比如:

  1. 包含的用戶:contained user,在Azure SQL DB中它並不映射到一個登錄名,而是由Azure Active Directory或者數據庫本身來授權。在非PaaS中,一個登錄名會映射到數據庫中已存在的用戶。這種做法的好處是使得數據庫更易於移植,畢竟雲平臺上很多的移植或者遷移都是必須的。
  2. 某些DB 角色的差異:db_datareade, db_datawriter等是相同的,但是比如sysadmin和serveradmin等是不存在於Azure SQL DB,可以看看下面這個圖,不過由兩個新的服務器級別角色可以替代,dbmanager,類似於dbcreator可以創建和刪除數據庫,loginmanager類似於securityadmin可以創建新登錄名,注意這裏是server的securityadmin而不是下圖的db_securityadmin。
    在這裏插入圖片描述
  3. SSMS的操作受限程度很高,絕大部分的鼠標操作最終還是彈出SQL命令,比如右鍵“Logins”然後選擇“New Login”,出現的就如下圖:
    在這裏插入圖片描述
    在這裏插入圖片描述

演示

  下面按照幾種常見的需求演示一下:

創建常規的SQL 身份驗證

  使用你在portal上面創建SQL DB時定義的賬號及密碼連到SQL DB(此時爲master庫,如果時其他庫,是創建不了登錄名的),創建一個SQL 身份認證的登錄名叫test的,密碼爲1234.abc。然後在用戶數據庫中創建一個用戶映射到test登錄名中,最後添加到db_datareader和db_datawriter角色中。

-- 在Master庫中創建SQL 身份驗證的登錄名 
CREATE LOGIN test 
WITH PASSWORD = '1234.abc!'

  新開一個窗口,然後執行:

-- 選擇目標數據庫,然後映射到剛纔的login中
CREATE USER [test] 
FOR LOGIN [test] 
WITH DEFAULT_SCHEMA = dbo; 

-- 授權
ALTER ROLE db_datareader ADD MEMBER [test]; 
ALTER ROLE db_datawriter ADD MEMBER [test];
在Azure SQL中,如果你要對所有的庫都創建的話,由於不能直接使用USE DB這個命令切換當前數據庫,所以你需要打開新的查詢窗口。

創建包含用戶的SQL 身份驗證用戶

  操作幾乎一樣,不過注意CREATE USER後面的關鍵字,包含用戶是不需要FOR LOGIN的,直接創建在對應的數據庫中即可。
在這裏插入圖片描述

Azure AD用戶的創建

  重點在於FROM 後面:

-- 添加包含得Azure AD 用戶,不需要使用密碼
CREATE USER [name@domain.com] 
FROM EXTERNAL PROVIDER 
WITH DEFAULT_SCHEMA = dbo;  
  
-- 授權
ALTER ROLE dbmanager ADD MEMBER [name@domain.com]; 
ALTER ROLE loginmanager ADD MEMBER [name@domain.com];

創建具有服務器管理權限的用戶

  如果需要分配一個賬號給其他人進行服務器管理,可以在master庫中創建一個用戶來實現:

-- 創建登錄名
CREATE LOGIN [test2] 
WITH PASSWORD='1234.abc!';  
  
-- 創建常規的SQL 身份驗證用戶到Master庫
CREATE USER [test2] 
FROM LOGIN [test2] 
WITH DEFAULT_SCHEMA=dbo; 
  
-- 添加前面提到的dbmanager和loginmanager角色
ALTER ROLE dbmanager ADD MEMBER [test2]; 
ALTER ROLE loginmanager ADD MEMBER [test2];

  然後可以使用test2這個用戶來創建數據庫和登錄賬號的常見刪除。如果使用這個用戶創建數據庫,那麼這個用戶就是數據庫的owner。

說明

  Dbmanager是master庫中的角色,所以只能把數據庫用戶添加到這個角色,不能把一個服務器級別的登錄名添加給一個數據庫級別的角色。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章