知识点:SQL Server数据库登录名的使用的创建、SQL Server数据库用户名的创建、登录名和用户名的关系
1、回顾SQL Server数据库登录的过程
在完成SQL Server数据库数据库的安装,并且启动SQL Server数据库服务之后,需要登录,去链接到它,才能对数据库进行操作。怎么登录呢?我们使用一个工具,SQL Server Management Studio(简称SSMS),是SQL Server的一个管理工具,打开以后登录数据库,数据库服务器是在后台运行。
仔细观察,会发现身份验证有多种方式,我们主要了解SQL Server 身份验证和Windows 身份验证两种。
- SQL Server 身份验证,使用SQL Server 中创建的登录名登录,需要填写登录名和密码。
- Windows 集成身份验证,用当前操作系统的用户来登录数据库,不需要填写登录名和密码,直接登录。
这两种身份验证方式的区别,如何使用?
- Windows 身份验证比较方便,一般在测试时使用,
- SQL Server 身份验证安全性更高,实际开发中一般使用这种登录方式。
2、什么是SQL Server数据库登录名和用户名?
登录名(服务器登录名):登录服务器的用户账号。
我们在登录数据库服务器时,可以使用sa登录,但是在实际开发中,为了数据库的安全性通常会将sa禁止或删除,那么怎么登录服务器呢?我们可以根据需要创建新的登录名。
用户(数据库用户):指有权限能操作数据库的用户。
登录名只是用来登录服务器,但是不能让用户访问服务器中的数据库资源。登录服务器之后要想对数据库进行操作,需要通过用户来进行。
相关概念理解:
- 服务器登录名:指有权限登录到某服务器的用户,可以在有权限的情况下创建新的登录名,超级管理员的登录名是sa。
- 服务器角色:指一组固定的服务器用户,默认有9组;
- 数据库用户:指有权限能操作数据库的用户;
- 数据库角色:指一组固定的有某些权限的数据库角色,默认有9组,服务器角色不容许更改;
- 数据库架构:指数据库对象的容器;
3、创建SQL Server登录名
第一步:用windows身份或sa身份登录本地数据库
第二步:依次点击【安全性】—右键单击【登录名】—点击【新建登录名】
第三步:在新建登录名对话框中输入登录名—【点选】SQL Server身份验证—输入密码—【取消勾选】强制实施密码策略(不然再次登录时会强制修改密码)—默认数据库(不修改)
第四步:给新创建的登录名赋予操作权限,不然就只能连接到服务器,而没有任何操作权限。登录名的操作权限分为两类(服务器权限、数据库权限)
注意:为了演示效果,这一步暂时省略,即第三步操作完成后直接单击【确定】,此时刷新左侧登录名,可以看到刚才创建的登录名wangdi,已经显示出来。
验证1:断开服务器连接,使用新创建的登录名wangdi,登录服务器,结果可以正常登录。
断开服务器连接:
使用新的登录名连接服务器:
结论:新创建的登录名可以登录数据库服务器.
验证2:尝试打开其他数据库,或新创建一个数据库。结果无法正常进行。
结论:创建登录名的时候,还需要赋予它一定的权限,才能对数据库进行操作。
修改方法:重新用windows身份或sa身份登录服务器,然后在【安全性】中找到新创建的登录名wangdi,右键单击登录名wangdi点击【属性】,然后在弹出的登录属性窗体中,点击左边的【服务器角色】进行修改。(实际上是完善第四步未完成的部分)
注意:这里可以看到服务器角色—默认public,可以勾选dbcreator服务器角色(创建、更改、删除和还原任何数据库的权限),单击【确定】以后,重新使用登录名wangdi登录服务器,进行验证。此时发现,wangdi可以创建新的数据库,但是其服务器中其他用户创建的数据库却无法操作。
提示:我们一般用windows身份或sa身份登录服务器,这两种登录名具有最高的服务器角色,也就是可以对服务器进行任何一种操作。而这种登录名具有的用户名是dbo(系统弄的),也就具有对所有用户创建的数据库中的数据进行一切的操作的权限。所以,一般我们感觉不到上述那些东西,但是,他们确实存在。
也就是说数据库管理员在SQL Server中的用户名就叫dbo,而不叫 sa,这一点看起来有点蹊跷,因为通常用户名与登录名相同(不是强制相同,但为了一目了然通常都在创建用户名时使用与登录名相同的名字)。例如创建了一个登录名称为wangdi,那么可以为该登录名wagndi在指定的数据库中添加一个同名用户,使登录名me能够访问该数据库中的数据。当在数据库中添加了一个用户wangdi后,之后以wangdi登录名登录时在该数据库中创建的一切对象(表、函数、存储过程等)的所有者都为wangdi。
4、创建数据库用户名
第一步:断开当前登录名登录状态,使用sa身份登录
第二步:在具体某一个数据库的【安全性】—【右键】用户—【新建用户】,这里以原有的数据库MobileDB为例进行。
第三步:在新建对话框中输入【用户名称】—选择要关联的登录名即可(同时可以指定它的默认架构,如不指定就是dbo(系统管理员))
第四步:单击左侧【成员身份】,勾选4个数据库角色(也可以修改刚才创建的登录名—右键单击【属性】—单击对应数据库,勾选下方服务器角色)
到这里就完成了新创建登录名和用户名的方法,在讲解中为了让大家明白其中的区别,所以分了两个步骤分别进行创建。实际上在创建登录名的时候,可以通过【用户映射】的方法,让系统自动创建同名用户名,一步到位。
5、SQL Server数据库登录名、用户名的区别与关系
- 登录名:服务器方的一个实体,使用一个登录名只能进入服务器,但是不能让用户访问服务器中的数据库资源。每个登录名的定义存放在master数据库的syslogins表中
- 用户名:一个或多个登录对象在数据库中的映射,可以对用户对象进行授权,以便为登录对象提供对数据库的访问权限。用户定义信息存放在每个数据库的sysusers表中。
SQL Server把登录名与用户名的关系称为映射。用登录名登录SQL Server后,在访问各个数据库时,SQL Server会自动查询此数据库中是否存在与此登录名关联的用户名,若存在就使用此用户的权限访问此数据库,若不存在就是用guest用户访问此数据库(guest是一个特殊的用户名)。
一个登录名可以被授权访问多个数据库,但一个登录名在每个数据库中只能映射一次。即一个登录可对应多个用户,一个用户也可以被多个登录使用。好比SQLSERVER就象一栋大楼,里面的每个房间都是一个数据库。登录名只是进入大楼的钥匙,而用户名则是进入房间的钥匙。一个登录名可以有多个房间的钥匙,但一个登录名在一个房间只能拥有此房间的一把钥匙。
注意:要是想删除自己创建的用户,记得一定要先删除数据库中的用户名,最后再去删除登录名,顺序不能弄反。(若已经全部删除了数据库中的用户名,但在删除登录名的时候还是报错,试一下刷新数据库再重新删除!)即,创建从登录名到用户名,删除从用户名到登录名。
阅读延伸:
1、服务器级的固定角色及其权限。
服务器级的固定角色 | 描述 |
sysadmin | sysadmin 固定服务器角色的成员可以在服务器上执行任何活动。 |
serveradmin | serveradmin 固定服务器角色的成员可以更改服务器范围的配置选项和关闭服务器。 |
securityadmin | securityadmin 固定服务器角色的成员可以管理登录名及其属性。 他们可以 GRANT、DENY 和 REVOKE 服务器级权限。 他们还可以 GRANT、DENY 和 REVOKE 数据库级权限(如果他们具有数据库的访问权限)。 此外,他们还可以重置 SQL Server 登录名的密码。 |
重要说明: 能够授予数据库引擎的访问权限和配置用户权限的能力使得安全管理员可以分配大多数服务器权限。 securityadmin 角色应视为与 sysadmin 角色等效。 | |
processadmin | processadmin 固定服务器角色的成员可以终止在 SQL Server 实例中运行的进程。 |
setupadmin | setupadmin 固定服务器角色的成员可以使用 Transact-SQL 语句添加和删除链接服务器。(使用 Management Studio 时需要 sysadmin 成员资格。) |
bulkadmin | bulkadmin 固定服务器角色的成员可以运行 BULK INSERT 语句。 |
diskadmin | diskadmin 固定服务器角色用于管理磁盘文件。 |
dbcreator | dbcreator 固定服务器角色的成员可以创建、更改、删除和还原任何数据库。 |
public | 每个 SQL Server 登录名都属于 public 服务器角色。 如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限,该用户将继承授予该对象的 public 角色的权限。 只有在希望所有用户都能使用对象时,才在对象上分配 Public 权限。 你无法更改具有 Public 角色的成员身份。 |
注意: public 与其他角色的实现方式不同,可通过 public 固定服务器角色授予、拒绝或调用权限。 |
2、固定数据库角色及其能够执行的操作。 所有数据库中都有这些角色。 无法更改分配给固定数据库角色的权限,“公共”数据库角色除外。
固定数据库角色名 | 描述 |
db_owner | db_owner 固定数据库角色的成员可以执行数据库的所有配置和维护活动,还可以删除 SQL Server中的数据库。 (在 SQL Database 和 SQL 数据仓库中,某些维护活动需要服务器级别权限,并且不能由 db_owners执行。) |
db_securityadmin | db_securityadmin 固定数据库角色的成员可以修改角色成员身份和管理权限。 向此角色中添加主体可能会导致意外的权限升级。 |
db_accessadmin | db_accessadmin 固定数据库角色的成员可以为 Windows 登录名、Windows 组和 SQL Server 登录名添加或删除数据库访问权限。 |
db_backupoperator | db_backupoperator 固定数据库角色的成员可以备份数据库。 |
db_ddladmin | db_ddladmin 固定数据库角色的成员可以在数据库中运行任何数据定义语言 (DDL) 命令。 |
db_datawriter | db_datawriter 固定数据库角色的成员可以在所有用户表中添加、删除或更改数据。 |
db_datareader | db_datareader 固定数据库角色的成员可以从所有用户表中读取所有数据。 |
db_denydatawriter | db_denydatawriter 固定数据库角色的成员不能添加、修改或删除数据库内用户表中的任何数据。 |
db_denydatareader | db_denydatareader 固定数据库角色的成员不能读取数据库内用户表中的任何数据。 |
====================这里是结束分割线========================