在SQL Server中新建登录名和数据库用户既可通过SSMS可视化窗口创建,也可通过SQL语句创建~


一、登录名与用户名

首先,咱们先来聊聊:数据库登陆名和数据库用户名之间的关系
数据库登陆名和数据库用户名是有差别的,在一个数据库中一一相对应的关系。一个经典的比喻:如果把数据库比作一个大厦,那么数据库登录名就是进入大厦的通行证,而用户名则是进入大厦房间的钥匙,如果每个房间看做是SQL数据库(大厦)的一个数据库,那么每个登陆名可以在每一个数据库中创建一个用户,如果没有创建用户,则登陆名就只能纯粹的登陆数据库,什么事情都干不了。


二、新建登录名

登录名是一个可由安全系统进行身份验证的安全主体或实体。 用户需要使用登录名连接到 SQL Server。 你可基于 Windows 主体(例如,域用户或 Windows 域组)创建登录名,或者也可创建一个并非基于 Windows 主体的登录名(例如, SQL Server 登录名)。登录名的作用域是整个 数据库引擎。
(ps:若要使用 SQL Server 身份验证,数据库引擎必须使用混合模式身份验证,如果有小伙伴没有修改身份验证为混合模式身份验证的,我在这篇博客中有讲解:SQL Server 2017 Developer的下载、安装、配置【以及SSMS的下载安装配置】

使用 SSMS 创建登录名

① 在对象资源管理器中,展开要在其中创建新登录名的服务器实例的文件夹,即图中的根目录。然后展开【安全性】文件夹,右键单击【登录名】,选择【新建登录名】
在这里插入图片描述
② 输入登录名,我这里以SQL Server身份验证为例,输入密码确认密码,然后在下面的三个选项中我取消了“用户在下次登录时必须更改密码”这一项,密码策略具体可看:密码策略,不过咱现在先这样设置就行啦。然后选择【状态】,如下下图授予权限,点击确定
在这里插入图片描述
(ps:从 “默认数据库” 列表中,可选择登录名的默认数据库。 “master” 是此选项的默认值。从 “默认语言” 列表中,选择登录名的默认语言)
在这里插入图片描述
③ 刷新登录名,就可看到刚刚新建的登录名Henry啦
在这里插入图片描述

使用 T-SQL 创建使用 SQL Server 身份验证的登录名

同样的我这里以创建SQL Server身份验证的登录名为例:
① 在 “对象资源管理器” 中,连接到 数据库引擎的实例
在这里插入图片描述
② 在标准菜单栏上,单击 【新建查询】 ,按以下其中一个格式在查询窗口中写上SQL语句,然后单击“执行” (还有很多种类型的登录名创建方式,这里就简单介绍这两种,详细参考:CREATE LOGIN (Transact-SQL)

CREATE LOGIN Jack WITH PASSWORD = 'henry626' /*, DEFAULT_DATABASE = STUDENT;  这里如果不指定数据库的话,默认为master数据库*/
GO

CREATE LOGIN Jack WITH PASSWORD = 'henry626' 
    MUST_CHANGE, CHECK_EXPIRATION = ON;  /*MUST_CHANGE 选项要求用户在首次连接服务器时更改此密码*/
GO

(ps:密码是区分大小写的。 密码应始终至少包含八个字符,并且不能超过 128 个字符。 密码可以包含 a-z、A-Z、0-9 和大多数非字母数字字符。 密码不能包含单引号或 登录名)
在这里插入图片描述
在这里插入图片描述
通过下图可看到登录名Jack具有的权限是通过SQL Server身份验证登录数据库和查看某数据库,这里的某数据库取决于它在数据库中的映射的用户,登录名必须映射到数据库用户才能连接到数据库。 一个登录名可以作为不同用户映射到不同的数据库,但在每个数据库中只能作为一个用户进行映射。(总之注意这里是ANY不是ALL,如果它不是在每个数据库都有用户进行映射的话,它是不能访问所有数据库的)
在这里插入图片描述

好了,现在大概了解了登录名,咱们也创建好了登录名,那就用刚刚创建的登录名创建几个用户名吧~


三、新建数据库用户

用户是数据库级别安全主体。 登录名必须映射到数据库用户才能连接到数据库。 一个登录名可以作为不同用户映射到不同的数据库,但在每个数据库中只能作为一个用户进行映射。 在部分包含数据库中,可以创建不具有登录名的用户(没有登录名的用户。 不能登录,但可以被授予权限)。 数据库内的权限是向数据库用户而不是向登录名授予和拒绝授予的。

使用 SSMS 创建用户

① 在对象资源管理器中,展开 【数据库】 文件夹,展开要在其中创建新数据库用户的数据库(我这里以STUDENT为例),右键【安全性】文件夹 —>【新建】—>【用户】
在这里插入图片描述
② 在弹出的窗口按如下顺序操作,注意: 因为刚刚新建了Jack登录名,所以可以选择它。当然如果之前没有新建登录名或者想用其他的登录名也可以(因为【浏览】里还是有不少的登录名的),就是注意该登录名是否已经被用了就行,被用了的话会有如下下图的提示,重新选择一个没用过的即可~
在这里插入图片描述
如下图,用户Henry选择了登录名Jack,但是登录名Jack刚刚已经被用户Jack使用了,所以创建失败
在这里插入图片描述

使用 T-SQL 创建用户

① 在 “对象资源管理器” 中,连接到 数据库引擎的实例
在这里插入图片描述
② 在标准菜单栏上,单击 【新建查询】 ,按以下格式在查询窗口中写上SQL语句,然后单击“执行” (同样还有很多种类型的数据库用户创建方式,这里就只是简单的介绍,详细参考:CREATE USER (Transact-SQL)

-- 创建登录名和创建用户可以一起写,这里先创建了一个名为Alice的用户,登录密码是:henry626626 
CREATE LOGIN Alice  
    WITH PASSWORD = 'henry626626' /*, DEFAULT_DATABASE = STUDENT;   这里不指定的话,默认为master数据库*/
GO  

-- 给刚刚创建的登录名Alice创建一个数据库用户Alice
CREATE USER Alice FOR LOGIN Alice;  
GO

-- 创建没有登录名的用户。不能登录,但可以被授予权限
CREATE USER Mark WITHOUT LOGIN;

在这里插入图片描述
🌟 新建好用户之后可通过该SQL语句快速查看所有的用户:

--查看所有用户
exec sp_helpuser;

在这里插入图片描述
如图中左上角所示,我当前使用的是master数据库,刚刚通过SSMS创建的Jack用户是在STUDENT数据库中的,所以这里执行后看不到他,看我切换到STUDENT数据库再执行一次:
在这里插入图片描述
🙋细心地小伙伴发现:Jack的DefDBName(DEFAULT_DATABASE)为啥是master呀?嘿嘿,因为上面通过SSMS创建登录名Jack时使用的是默认数据库,即master。


🔥总结如下:

SQL Server中 登录名和数据库用户根据个人需求均可采用SSMS来创建或者直接使用SQL语句创建(我个人更喜欢后者一点嘻嘻)
使用SQL语句创建的一般的简单形式如下,直接copy然后修改名字、密码就能用~(ps:密码使用强密码,何为强密码?咳咳,请看:强密码

-- 先创建了一个名为Alice的用户,登录密码是:henry626626
CREATE LOGIN Alice  
    WITH PASSWORD = 'henry626626';  /*, DEFAULT_DATABASE = STUDENT; */
GO  

-- 给刚刚创建的登录名Alice创建一个数据库用户Alice
CREATE USER Alice FOR LOGIN Alice;  
GO

— — — — — — — — — — — — — —
🙋GO到底是什么,有什么用啊?
· 官方:GO只是SQL Server管理系统(SSMS)中用来提交T-SQL语句的一个标志
· 如何理解呢:
GO是批处理的标志,是一条或多条SQL语句的集合,SQL Server将批处理语句编译成一个可执行单元,此单元称为执行计划,意思就是:GO语句把程序分成一个个的代码块,即使一个代码块执行错误,它后面的代码块仍然会执行
· 这里新建登录名然后新建用户加上GO的作用我认为应该是为了因为已经存在这个登录名了所以新建登录名拒绝执行,但是新建用户语句能正常执行(前提是登录名没被使用),所以如果只是做个小实验或者登录名很少 用户很少的情况下可以先查看所有用户及其登录名,如果都一一对应了就可以不用加GO了。直接(简洁明了):

CREATE LOGIN Alice WITH PASSWORD = 'henry626626';  
CREATE USER Alice FOR LOGIN Alice;  

关于GO的详细解释可参考:SQL Server 中 GO 的用法,对于这里用到的SQL语句来说,你看了我上面写的就可以啦,可以不用去过深研究(当然研究精神是很赞同的!)
— — — — — — — — — — — — — —
新建好用户之后可通过该SQL语句快速查看当前数据库中的所有用户:

--查看所有用户
exec sp_helpuser;

ps:我用登录名Henry和Alice进行了测试,如下图,均可正常登录~
在这里插入图片描述
👂需要注意的是!!! 这里的SQL语句中根据自身需求指定DEFAULT_DATABASE,我这里新建Alice时没有指定所以默认是master数据库,因此在使用Alice登录数据库之后是不能使用除了master外的其他数据库的,如下图所示:
在这里插入图片描述


补充一个小拓展

通过以下代码同样可以达到新建登录名和用户的目的,因为以下语句我没有过多研究,所以就不做讲解啦,大家也可采用如下方式来创建登录名和用户(因为对该方法不太熟悉,所以我建议使用上面讲解的方法):

exec sp_addlogin '登录名', '密码', '选择的数据库';
exec sp_adduser '登录名', '用户名';

以下是我之前采用该方法创建的过程截图(大家使用时密码请设置强密码!我这里只是做实验随意设置的弱密码):
在这里插入图片描述
在这里插入图片描述
(ps:该方法创建用户是会顺带创建其同名架构的,如上图U2创建时其默认架构就不是dbo了,变为了U2)


好了,关于SQL Server中创建登录名和用户的介绍到这里就结束啦感谢阅读~😊
因为本文是以使用SQL Server身份验证来创建的登录名,如需看使用Windows身份验证的小伙伴或者想更详细了解的小伙伴可参考SQL官方文档:创建一个登录名,文档的最后有关于创建数据库用户等的官方文档的链接,可以一次让你看个够👀,哈哈
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐