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库中的角色,所以只能把数据库用户添加到这个角色,不能把一个服务器级别的登录名添加给一个数据库级别的角色。

在这里插入图片描述

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