SQLServer数据库权限设置--保障数据库安全

Posted 17卓越

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLServer数据库权限设置--保障数据库安全相关的知识,希望对你有一定的参考价值。

一.登陆界面引入

下图为SQL Server的登陆界面。

1)服务器名称:“.”代表本地计算机,选择下拉框,可以看见还有一个与本机机名相同的内容,也代表于本地服务器连接;要连接远程服务器的话,在此处填写远程IP地址;

2)身份验证:身份验证下拉框内容为”Windows 身份验证“和 ”SQLServer 身份验证“两种登陆方式,这就是登陆账户。

  ”Windows 身份验证“:适合于Windows平台用户,不需要提供密码和Windows集成验证;

  ”SQLServer 身份验证“:适合于非Windows平台用户或Internet用户,需要提供登陆账号和登陆密码;账号sa就属于该种登陆账户,是一个超级管理员登陆账号。

3)sa登陆账号

  sa是一个超级登陆账号,我们使用他后,可以看见数据库服务器中的所有数据库,及各数据库中所有的表,拥有着管理数据库服务器的所有权限,刚学习.net程序开发的时候,应用程序,会使用该账号连接数据库,因为该账号的特殊性,使得我们在开发程序时,使用该账号,对数据库安全性极其不安全(因为可以看到所有的数据库,数据表,并能对数据库进行增删改操作)。为此,在程序开发中,有必要通过添加新的登陆账号,添加对应的数据库用户,并对数据库用户设置不同的权限,以保证数据库及数据的安全性。

  下面内容主要说明怎样创建登陆账号,创建数据库用户,及对数据库用户授予权限。

 

 二.登陆账号添加与删除

  1)登陆账号添加

  1.创建Windows 登陆账户,  语法: exec sp_grantlogin \'登陆账号\'

use master
go
exec sp_grantlogin \'LAPTOP-R1U6PBGI\\xiaoming\'
--LAPTOP-R1U6PBGI代表本机机器名,xiaoming代表该电脑的一个用户名,这个账号可以通过"计算机管理"中的"本地用户和组"来为该电脑添加用户,并设置对本电脑操作权限

  2.创建SQL Server登陆账户, 语法: exec sp_addlogin \'登陆账号\',‘登陆密码’

use master
go
exec sp_addlogin \'xiaoming\',\'123456\'

执行代码后,在数据库客户端会显示这两个登陆账号,如下图所示

  2)删除登陆账户,语法:exec sp_droplogin \'登陆账号\'

use master
go
exec sp_droplogin \'LAPTOP-R1U6PBGI\\xiaoming\'

   用新创建的登陆账号登陆SQL server客户端后(没有为其添加数据库用户和权限),点击里面的数据库发现SQL server客户端报以下提示

  并且[安全性]里的[登陆名]与sa账号里的内容不同,只有\'sa\'和刚刚创建的\'xiaoming\'账号

备注:

  使用刚创建的登陆账号登陆客户端,在没有为其设置数据库用户的时候,只能看见里面有的数据库,不能打开数据库,更不能查看其中的数据表,不能执行SQL语句的查询.

三.数据库用户

 

  1)创建数据库用户

  指定为哪个数据库添加数据库用户,基本语法:exec sp_grantbaccess  \'登陆账户名\',\'数据库用户名\'

use SMDB--为数据库SMDB创建数据库用户名
go
exec sp_grantdbaccess \'xiaoming\',\'xiaomingUser01\'

  创建登陆账户都是在master数据库下执行的,而数据库用户名是为具体的数据库内创建,所有使用 use SMDB go 语法指向SMDB数据库,调用系统存储过程sp_grantdbaccess 创建名为xiaomingUser01的用户名,其登陆账号名为xiaoming。

  下图可以看见,数据库SMDB中的安全性里的用户已有xiaomingUser01用户名

  从上图还可以看见,dbo数据库用户名,它表示数据库的所有者(DB Owner)。可以对数据库和其对象进行所有的管理工作,拥有数据库操作的所有权限。我们无法删除dbo用户,此用户出现每个数据库中,默认分配给sa登陆账号,所以sa登陆账号可以访问所有的数据库。

  2)删除数据库用户

  同样是在具体的数据库中执行删除,而非master数据库中执行

  语法: exec sp_dropuser \'数据库用户名\'

use SMDB
go
exec sp_dropuser \'xiaomingUser01\';

四.给数据库用户授权

  为数据库创建完数据库用户名后,使用xiaoming登陆账号登陆客户端后,发现我们只能打开数据库SMDB,其他数据库同样无法打开,打开SMDB数据后,发现‘表’中内容为空,没有数据表,这是为何?因为我们还没有为用户授权,这样,用户就不能对数据库进行操作,为保证软件使用功能,我们有必要对数据用户进行限制。如银行管理系统,客户和银行对银行软件系统的访问权限是不同的,客户只能查看自己账户的信息,如存款多少,透支额度,密码修改等权限,不能查看其他客户信息;而银行则可以查看所有的客户基本信息,如客户卡号,开卡时间,卡号是否冻结等权限,却不能更改客户的密码,存款多少,更改存款等权限。可见,给数据库用户授权的重要性,及安全性,它保证了不同用户操作同一数据库的权限。

  1)授权语法

  grant 权限 [on 表名] to 数据库用户

  2)收回权限语法

  revoke 权限 [on 表名] to 数据库用户

注明:[]里的内容是限定数据库中数据表,可以不加,不加[]内容表示给数据库中的所有数据表授权,加上[]限定内容,只是对限定的表格授权。

use SMDB
go
grant select,insert,update on Students to xiaomingUser01

  给表Students授权增、改、查数据操作后,我们使用xiaoming登陆账号登陆后,能看见数据库SMDB中的表Students,却看不见其他的数据表,而且在Students表中不能执行删除操作,因为我们没有赋予删除的权限。

use SMDB
go
grant select,insert,update  to xiaomingUser01

  对比两段代码,执行后,代码1只是给Students数据表授权,而代码2没有限定,则给数据库SMDB中所有数据表授权。

  3)数据库角色

  给用户单独授权非常麻烦,为此我们可以给数据库用户赋予一个对应的“角色”;角色自动给数据库用户相应的权限。使用方便。下面为常用的固定角色。

    1.数据库角色

    public
    --public 角色是一个特殊的数据库角色,每个数据库用户都属于它。public 角色: 
    --捕获数据库中用户的所有默认权限。
    --无法将用户、组或角色指派给它,因为默认情况下它们即属于该角色。
    --含在每个数据库中,包括 master、msdb、tempdb、model 和所有用户数据库。
    --无法除去。

    db_owner 
    --进行所有数据库角色的活动,以及数据库中的其它维护和配置活动。
    --该角色的权限跨越所有其它固定数据库角色。

    db_accessadmin 
    --在数据库中添加或删除 Windows NT 4.0 或 Windows 2000 组和用户以及 SQL Server 用户。

    db_datareader 
    --查看来自数据库中所有用户表的全部数据。

    db_datawriter 
    --添加、更改或删除来自数据库中所有用户表的数据

    db_ddladmin 
    --添加、修改或除去数据库中的对象(运行所有 DDL)

    db_securityadmin 
    --管理 SQL Server 2000 数据库角色的角色和成员,并管理数据库中的语句和对象权限

    db_backupoperator 
    --有备份数据库的权限

    db_denydatareader 
    --拒绝选择数据库数据的权限

    db_denydatawriter
    --拒绝更改数据库数据的权限

  2.添加和删除固定角色的基本语法

  exec sp_addrolemember \'数据库角色名\',‘数据库用户名’

  exec sp_droprolemember ‘数据库角色名’,‘数据库用户名’

  3.具体代码:

use SMDB
go
exec sp_addrolemember \'db_owner\',\'xiaomingUser01\'--增加db_owner角色
exec sp_droprolemember \'db_owner\',\'xiaomingUser01\'--删除角色

 

 五.补充说明

  登陆账号和数据库及数据库用户的关系

  登陆账号和数据库用户是一对多的关系,数据库用户和数据库是一对一的关系。一个登陆账号,可以有多个数据库用户,而一个数据库用户只能与一个数据库对应。

 


说明:

  以上内容为本人学习过程中整理,可能有知识点不全,或理解不足之处,请大家多多留言指教。

以上是关于SQLServer数据库权限设置--保障数据库安全的主要内容,如果未能解决你的问题,请参考以下文章

Smartbi权限安全管理系统_保障数据权限安全

SQL Server的权限管理和数据恢复

Dataphin核心功能:安全——基于数据权限分类分级和敏感数据保护,保障企业数据安全

sqlserver创建用户

SQL Server 数据库权限设置

sqlserver 创建数据库的权限是哪个