数据库用户是数据库级别上的主体。用户在具有了登录名之后,只能连接到SQLServer数据库服务器上,并不具有访问任何用户数据库的权限,只有成为了数据库的合法用户后,才能访问该数据库。本节介绍如何对数据库用户进行管理。
数据库用户一般都来自于服务器上已有的登录名,让登录名成为数据库用户的操作称为“映射”。一个登录名可以映射为多个数据库中的用户,这种映射关系为同–服务器上不同数据库的权限管理带来了很大的方便。管理数据库用户的过程实际上就是建立登录名与数据库用户之间的映射关系的过程。默认情况下,新建立的数据库只有一一个用户- -dbo, 它是数据库的拥有者。
dbo用户的
例子:创建名为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登录名、服务器角色、数据库用户、数据库角色、架构区别联系
从当前数据库中删除一个用户,实际就是解除了 登录名和数据库用户之间的映射关系,
但并不影响登录名的存在。删除数据库用户之后,其对应的登录名仍然存在。
删除 ,这样就SQL_JWC数据库就没有数据库用户了,没有映射,就不能访问其他建立的数据库
没有与数据库的映射,就不能访问
–删除数据库用户
drop user SQL_User2
在数据库管理系统中,权限- -般分为对象权限、语句权限和隐含权限三种,其中语句权
限和对象权限是可以授予数据库用户的权限,隐含权限是用户自动具有的权限。
因为隐含权限已经预先设置好了,所以权限管理是指对对象权限和语句权限的设置
权限的管理包含三个方面:
●授予权限:授予用户或角色的某种操作权。
●收回权限:收回(或称为撤销)曾经授予给用户或角色的权限。
●拒绝访问:拒绝某用户或角色的某种操作权限,即使用户或角色由于继承而获得这种操作权限,也不允许执行相应的操作。
数据库—安全性—用户----SQL_User1-----属性----安全对象
在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
在"学生数据库“中,我们以授予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
同对象管理一样,语句权限的管理也有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中,角色分为系统预定义的固定角色和用户根据自己的需要定义的
用户角色两类,我们这里只介绍用户定义的角色。
--首先选中要使用的数据库
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
例子:
将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'
在“学生数据库”中,删除CompDept角色中的SQL_User2成员。
--在“学生数据库”中,删除CompDept角色中的SQL_User2成员。
EXEC sp_droprolemember 'ComDept','SQL_User2'