数据库用户管理
SQL Server的安全包括服务器安全和数据安全两部分。
服务器安全是指可以SQL Server数据库服务器的登录管理、数据库数据的访问安全等,数据安全则包括数据的完整性、数据库文件的安全性。
因此,如果你准备访问SQL Server数据库的数据,你应该具有SQL Server登录帐户和访问数据库的权限。
下面逐一讲解如何创建登录帐户、如何创建数据库用户和如何给用户授权。
一、SQL Server身份验证
在登录SQL Server时,需要选择身份验证的方式,SQL Server支持以下两种身份验证。
Windows身份验证。
SQL Server身份验证。
简单地说,Windows身份验证是使用当前登录到操作系统的用户去登录,而SQL Server 身份验证是使用SQL Server中建立的用户去登录。
登录验证通过以后,就可以像管理本机SQL Server一样来管理远程机上的SQL Server 服务。
二、建立登录帐户并赋予权限
与创建数据库一样,建立SQL Server数据库的登录名、用户名,为其赋予权限也有两种方式。
1)使用SQL Server Management Studio建立登录账户并赋予权限
2)使用T-SQL建立登录账户并赋予权限
1.在SQL Server Management Studio中建立登录账户并赋予权限
在SQL Server Management Studio中,通常需要进行三步操作。
1)建立SQL Server登录名
在SQL Server Management Studio中,建立登录的步骤如下。
首先要用widows模式登陆,在windows模式下在数据库中进行建立。
点击
(1)在“安全性”节点下,右击“登录名”,在右键菜单中选择“新建登录名”选项。
(2)在新建登录对话框中输入用户的名称、SQL Server 身份验证的密码,并指定其默认的数据库。
(3)有了登录名之后,还需要赋予该登录名操作权限,否则它将只能连接到服务器,而没有任何的操作权限。
操作权限分为两类。
第一类是指该用户在服务器范围内能够执行哪些操作,这一类权限由固定的服务器角色来确定。
可以在“服务器角色”一项中设置该用户对服务器的操作权限。
固定的服务器角色一共分为8种,各自具有不同的操作权限。
例如dbcreator 固定服务器角色可以创建、更改、删除和还原任何数据库。
第二类权限是指该登录名对指定的数据库的操作权限。
可以在“用户映射”一项中设置特定数据库的权限。
固定的数据库操作权限有10个。
如db_backupoperator权限可以备份数据库、
db_datareader可以读取数据库中的数据、db_denydatareader不允许读取数据。
提示
登录名指定用户映射到的数据库后,系统将为该数据库自动创建同登录名同名的一个数据库用户。
创建该用户后,该登录名就可以连接到SQL Server
数据库,并可以执行权限范围内的相关操作。
在指定数据库“安全性”节点下,右击“用户”,在右键菜单中选择“新建用户”选
项。
(2)在新建对话框中输入用户的名称,选择关联的登录名,如图1.10所示。
图1.10 创建关联登录名
3)赋予用户访问数据库的权限
有了用户名和关联登录名之后,还需要赋予用户对该数据库的操作权限。
至此,数据库用户创建完毕。
此时使用创建用户时选择的关联登录名进行登录后,即具备了该数据库的相应操作权限。
经验
SQL Server安装以后,有一个超级管理员叫“sa”(Supper Administrator 的简称),但是一般不要使用这个用户管理数据,也不能把这个用户的密码
设置为空,随便使用该用户操作、密码设置为空都将给数据库带来很大的安
全隐患,所以一般在安装完毕并创建了其他登录名后,将sa账户进行禁用或
删除。
2.使用T-SQL 向数据库用户授权
1)建立数据库管理系统登录名
添加Windows登录帐户需要调用T-SQL的 CREATE LOGIN语句,其用法为:
语法
CREATE LOGIN [windows域名\域帐户] FROM WINDOWS;
创建带密码的SQL登录帐名需要调用T-SQL的CREATE LOGIN语句的语法为:语法
CREATE LOGIN <loginName> WITH PASSWORD =
'<enterStrongPasswordHere>';
示例4
/*--添加Windows登录帐户 --*/
--windows用户jbtraining\ s26301为SQL Server登录名
CREATE LOGIN [jbtraining\s26301] FROM WINDOWS;
/*--添加SQL登录帐户--*/
--登录名为guohong,密码为guohong
CREATE LOGIN guohong WITH PASSWORD =‘guohong88’;
提示
删除用户登录账户的语句是DROP LOGIN语句。
drop login guohong
启用/禁用用户登录账户的语句是ALTER LOGIN语句。
alter login guohong enable
修改sa用户的登录密码
EXEC sp_password null,"123456","sa"
go
Alter LOGIN sa ENABLE
2)建立数据库用户
创建数据库用户的语法如下。
语法
CREATE USER [数据库用户] FOR LOGIN 登录帐户;
其中,“数据库用户”为可选参数,默认为登录帐户,即数据库用户默认和登录帐户同
示例5
/*--在TrainingBase数据库中添加两个用户--*/
USE TrainingBase
GO
--将用户名S26301DB与登录名jbtraining\S26301建立关联
CREATE USER S26301DB FOR LOGIN [jbtraining\S26301]
GO
--将用户名guohong与登录名guohong 建立关联
create user guohong for login guohong
GO
提示
SQL Server 2008之前的版本使用系统存储过程创建登录名和用户名,代码如下:
/*--添加SQL登录帐户--*/
EXEC sp_addlogin 'GameMaster', 'themaster' -- 帐户:GameMaster, 密码:themaster
GO
/*-----设置BBS作为当前的数据库--------*/
USE BBS
GO
/*--在TrainingBase数据库中添加一个用户--*/
EXEC sp_grantdbaccess 'GameMaster', 'BBSGameMaster'
/*--为BBSGameMaster分配建表的权限--*/
GRANT create table TO BBSGameMaster
提示
SQL Server 中的dbo用户是具有在数据库中执行所有活动的暗示性权限的用户,表示数据库的所有者(owner)。
一般来说,如果创建了某个数据库,
就是该数据库的所有者,即dbo用户。
dbo 用户是一个比较特殊的数据库用
户,无法删除,且此用户始终出现在每个数据库中。
3)向数据库用户授权
访问表的常用权限包括:添加数据(insert)、删除数据(delete)、更新数据(update)、查看数据(select)和创建表(create table)等操作。
授权语句的语法为:
语法
GRANT 权限 [ON 表名 ] TO 数据库用户
示例6
USE TrainingBase
GO
/*--为guohong分配对表trainee的select, insert, update权限--*/ GRANT select, insert, update ON trainee TO guohong
/*--为S26301DBUser分配建表的权限--*/
GRANT create table TO S26301DBUser
提示
使用REVOKE语句和DENY语句都能够取消数据库用户已具有的权限。
其
中: REVOKE 语句只是拒绝用户权限,但不能防止用户从组或角色成员资格
继承权限。
DENY 语句拒绝用户权限并防止用户通过其组成或角色成员资格继
承权限,它比REVOKE语句更严厉。