SQL Server的安全模型

xiaoxiao2021-02-28  6

SQL Server的安全模型

下面我们来学习一下SQL Server的安全模型,首先看一张图:

 

登录账号->数据库用户->访问权限,通过三道关口才能接触到数据表。

 

这就是SQLServer的三层安全管理体系,我们打个比方,假设您住在一个防卫森严的小区,您如果希望进入您的房间,当然需要闯三关。

第一关:您需要通过小区的门卫检查,进入小区;

第二关:到了您所在的单元楼门前,您还需要单元门的钥匙或门铃密码;

第三关:进了单元门后,您还需要您自己房间的钥匙。

 

看一下上面的图,SQLServer的安全管理是不是非常类似小区的三层验证关口?同样的,我们想操作数据库的某张表也要闯三关:

第一关:我们需要登录到SQL Server系统,即需要登录帐户;

第二关:我们需要访问某个数据库(相当于我们的单元楼),即需要成为该数据库的用户

第三关:我们需要访问数据库中的表(相当于打开我们的房间),即需要数据库管理员DBA给您授权,如增添、修改、删除、查询等权限。

 

咱们都知道,登录验证有两种方式:

1.SQL身份验证:适合于非windows平台的用户或Internet用户,需要提供帐户和密码

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

那么,登录帐户相应有两种:SQL帐户和Windows帐户

 

下面我们就一起来看看如何创建登录帐户、如何创建数据库用户以及如何给用户授权。

1.创建登录

添加 Windows登录帐户

EXEC sp_grantlogin ‘leno/123‘ /*域名/用户名 */

添加 SQL登录帐户

EXEC sp_addlogin ‘zhangsan', ‘1234’/*用户名/密码*/

 

2.创建数据库用户

创建数据库用户需要调用系统存储过程sp_grantdbaccess,其用法为:

EXEC sp_grantdbaccess ‘登录帐户名数据库用户名

 

其中,数据库用户名为可选参数,默认为登录帐户名,即数据库用户默认和登录帐户同名。

USE stuDB

GO

EXEC sp_grantdbaccess

'leno/123', 'lenoDBUser'

EXEC sp_grantdbaccess

'zhangsan', 'zhangsanDBUser'

 

其实,系统本身就内置了两个数据库用户:

qdbo用户

q表示数据库的所有者(DB Owner

q无法删除 dbo用户,此用户始终出现在每个数据库中

qguest用户

q适用于没有数据库用户的登录帐号访问

q每个数据库可有也可删除

 

dbo用户:表示DataBase Owner数据库的主人,一般来说,谁创建的数据库,谁就是数据库的主人,但是可以转让,就像房屋产权证转让一样。

guest来宾用户:就像你不是某个公司的员工,您进入该公司就是作为一个来宾(guest)身份一样。数据库中的guest用户含义一样:如果登录到SQL Server中了,希望访问某个数据库,但又不是该数据库的用户,那么当你访问时,SQL Server就认为你作为guest用户的身份访问数据库,至于你作为guest来宾用户是否能够访问数据库,那就看管理员的授权了。如果管理员给guest帐户授予了访问的权限,那么你就能访问。那么,什么叫做访问权限呢?打个比方:对于某间房屋来说,房屋的权限就是指房产出售权(房主)、转租(可能是租房人有事不住了,但又没到期)、只能居住(租房人)等。对于数据库来说,访问权限指的就是数据库的增(insert)、删(delete)、改(update)、查(select)权限以及其它执行权限等。

 

3.给数据库用户授权

授权的语法

GRANT权限 [ON表名 ] TO数据库用户

USE stuDB

GO

/*--zhangsanDBUser分配对表stuInfoselect, insert, update权限--*/

GRANT select, insert, update

ON stuInfo TO zhangsanDBUser

/*--lenoDBUser分配建表的权限--*/

GRANT create table TO lenoDBUser

 

注意授权只能向数据库用户授权,而不是给登录帐户授权。而且数据库的权限仅限于当前数据库,如果希望访问其他数据库,还需要成为其他数据库的用户。所以,现在大家应该清楚了:登录账号->数据库用户->访问权限,这三道关口就是SQL Server的安全模型。

 

转载请注明原文地址: https://www.6miu.com/read-1950011.html

最新回复(0)