概述
数据库用户是数据库级别上的主体。用户在具有了登录名之后,只能连接到SQLServer数据库服务器上,并不具有访问任何用户数据库的权限,只有成为了数据库的合法用户后,才能访问该数据库。本节介绍如何对数据库用户进行管理。
数据库用户一般都来自于服务器上已有的登录名,让登录名成为数据库用户的操作称为“映射”。一个登录名可以映射为多个数据库中的用户,这种映射关系为同–服务器上不同数据库的权限管理带来了很大的方便。管理数据库用户的过程实际上就是建立登录名与数据库用户之间的映射关系的过程。默认情况下,新建立的数据库只有一一个用户- -dbo, 它是数据库的拥有者。
建立数据库用户
用SSMS界面完成
dbo用户的
用sql语句创建
例子:创建名为SQL_JWC的SQL Server身份验证的登录名,该登录名的密码为123
然后在“学生选课数据库”中创建对应的数据库用户JWC
create login SQL_JWC
with password='123';
go
use 学生选课数据库
create user JWC for login SQL_JWC;
注意:一定要清楚服务器登录名与数据库用户是两个完全不同的概念。具有登录名的用户可以登录到SQL Server实例上,而且只局限在实例.上进行操作。而数据库用户则是以什么样的身份在该数据库中进行操作的映射名,是登录名在具体数据库中的映射,这个映射名(数据库用户名)可以与登录名一样,也可以不一样。一般为了便于理解和管理,都采用相同的名字。
sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系
删除数据库用户
从当前数据库中删除一个用户,实际就是解除了 登录名和数据库用户之间的映射关系,
但并不影响登录名的存在。删除数据库用户之后,其对应的登录名仍然存在。
用SSMS界面完成
比如删除刚才建立的JWC用户
删除 ,这样就SQL_JWC数据库就没有数据库用户了,没有映射,就不能访问其他建立的数据库
没有与数据库的映射,就不能访问
用SQL语句实现
–删除数据库用户
drop user SQL_User2
权限管理
权限种类及用户分类
权限种类
- 对象权限:
对象权限是用户在已经创建好的对象上行使的权限,主要包括对表和视图数据进行
SELECT、INSERT、UPDATE和DELETE的权限,其中UPDATE和SELECT可以对表或
视图的单个列进行授权。 - 语句权限:
SQL Server除了提供对对象的操作权限外,还提供了创建对象的权限,即语句权限。
SQL Server提供的语句权限主要包括:
●CREATE TABLE:具有在数据库中创建表的权限。
●CREATE VIEW:具有在数据库中创建视图的权限。
●CREATE DATABASE:具有创建数据库的权限。 - 隐含权限
隐含权限是指数据库拥有者和数据库对象拥有者本身所具有的权限,隐含权限相当于内
置权限,不需要再明确地授予这些权限。例如,数据库拥有者自动地具有对数据库进行一切
操作的权限。
数据库用户分类
- 系统管理员 sa
系统管理员在数据库服务器上具有全部的权限,包括对服务器的配置和管理权限,也
包括对全部数据库的操作权限。当用户以系统管理员身份进行操作时,系统不对其权限进
行检验。每个数据库管理系统在安装好之后都有自己默认的系统管理员,SQL Server 2012
的默认系统管理员是“sa”。在安装好之后可以授予其他用户系统管理员的权限。 - 数据库对象拥有者
创建数据库对象的用户即为数据库对象拥有者。数据库对象拥有者对其所拥有的对象具
有全部权限。 - 普通用户
普通用户只具有对数据库数据的增、删、改、查权限。
在数据库管理系统中,权限- -般分为对象权限、语句权限和隐含权限三种,其中语句权
限和对象权限是可以授予数据库用户的权限,隐含权限是用户自动具有的权限。
权限的管理
因为隐含权限已经预先设置好了,所以权限管理是指对对象权限和语句权限的设置
权限的管理包含三个方面:
●授予权限:授予用户或角色的某种操作权。
●收回权限:收回(或称为撤销)曾经授予给用户或角色的权限。
●拒绝访问:拒绝某用户或角色的某种操作权限,即使用户或角色由于继承而获得这种操作权限,也不允许执行相应的操作。
对象权限的管理
用SSMS实现
下面介绍在SSMS工具中对数据库用户授权的方法
数据库—安全性—用户----SQL_User1-----属性----安全对象
类似这样,只要插入和选择就行了
sql语句实现
在T-SQL语句中,用于管理权限的语句有三条:
●GRANT语句:用于授予权限。
●REVOKE 语句:用于收回或撤销权限。
●DENY语句:用于拒绝权限。
例子1:为user1用户授予Student表的查询权限
GRANT SELECT ON Student TO user1
例子2:为用户user1授予SC表的查询权和插入权限
GRANT SELECT,INSERT ON SC TO user1
例子3:收回用户user1对Student表的查询语句
REVOKE SELECT ON Student FROM user1
例子4:拒绝user1用户具有SC表的更改权限
DENY UPDATE ON SC TO user1
语句权限的管理
用SSMS工具实现
在"学生数据库“中,我们以授予SQL_User1用户具有创建表的权限为例
在授予SQL_User1用户权限之前,我们先用该用户建立一个新的数据库引擎查询,
--创建一个数据库引擎查询
CREATE Table Teachers(
Tid char(6), --教师号
Tname varchar(10) ) --教师名
如果出现这样的语句
在数据库“”中拒绝了CREATE TABLE 权限
使用ssms工具授予用户语句权限的步骤是:
选择数据库
选择你想要授予的权限
比如创建表
确定
注意,如果此时用SQL_Uscr1身份打开一个新的查询编辑器窗口,选用“学生数据库”,
并执行下述建表语句:
CREATE TABLE MyTable(c1 int)
这个错误的原因是SQL_User1用户没有在dbo架构中创建对象的权限,而且也没有为SQL_User1用户指定默认架构,因此create dbo.MyTable失败了。
解决此问题的一个办法是让数据库系统管理员定义一个架构,并将该架构的所有权赋给SQL_User1用户,将该架构的所有权赋给SQL_User1用户。然后将新建架构设为SQLUser1用户的默认架构。
实例:
CREATE SCHEMA TestSchema AUTHORIZATION SQL_User1
go
ALTER USER SQL_User1 WITH DEFAULT_SCHEMA=TestSchema
用SQL语句实现
同对象管理一样,语句权限的管理也有GRANT、REVOKE、DENY三种
- 授权语句 GRANT
- 收权语句 REVOKE
- 拒绝权限语句 DENY
例子:
授予user1具有创建数据表的权限
GRANT CREATE TABLE TO user1
–授予user1和user2具有创建数据表和视图的权限
GRANT CREATE TABLE,CREATE VIEW TO user1,user2
–收回授予user1创建数据表的权限
REVOKE CREATE TABLE FORM user1
–拒绝user1具有创建视图的权限
DENY CREATE VIEW TO user1
角色
在数据库中,为便于对用户及权限的管理,可以将一组具有相同权限的用户组织在一起,这一组具有相同权限的用户称为角色(Role)。角色类似于Windows操作系统安全体系的"组"
在SQLServer2012中,角色分为系统预定义的固定角色和用户根据自己的需要定义的
用户角色两类,我们这里只介绍用户定义的角色。
建立用户定义的角色
用SSMS工具实现
用SQL语句实现 CREATE ROLE
例子:
在“”数据库中创建一个角色CompDept
--首先选中要使用的数据库
CREATE ROLE CompDept;
在“”数据库中创建用户自定义角色:InfoDept,其拥有者为SQL_User1
--在“”数据库中创建用户自定义角色:InfoDept,其拥有者为SQL_User1
--选中要使用的数据库
CREATE ROLE InfoDept AUTHORIZATION SQL_User1
为用户定义的角色授权
与数据库用户授权的操作一样,可看上面
sql:
为Software角色授予""数据库中Student表的查询权
--为Software角色授予""数据库中Student表的查询权
GRANT SELECT ON Student TO Software
为CompDept角色授予“”数据库中Student表的增删改查权限
--为CompDept角色授予“”数据库中Student表的增删改查权限
GRANT SELECT,INSERT,DELETE,UPDATE ON Student TO CompDept
为用户定义的角色添加成员
用ssms工具实现
用sql语句实现
例子:
将HEYUJIE-PC域名下的Windows身份验证的账户Win_Userl添加到“”数据库的Software角色中。(假设Win_User1已是“”数据库中的用户)
EXEC sp_addrolemember 'Software','HEYUJIE-PC\Win_User1'
将SQLServer身份验证的SOL_User2账户添加到” “数据库的CompDept角色中(假设SQL_User2已是” “数据库中的用户)。
EXEC sp_addrolemember 'CompDept','SQL_User2'
删除用户定义角色中的成员
用ssms工具实现
用sql语句实现
在“学生数据库”中,删除CompDept角色中的SQL_User2成员。
--在“学生数据库”中,删除CompDept角色中的SQL_User2成员。
EXEC sp_droprolemember 'ComDept','SQL_User2'
小结