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' 其实,系统本身就内置了两个数据库用户: q dbo 用户 q 表示数据库的所有者(DB Owner) q 无法删除 dbo 用户,此用户始终出现在每个数据库中 q guest 用户 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分配对表stuInfo的select, insert, update权限--*/ GRANT select, insert, update ON stuInfo TO zhangsanDBUser /*--为lenoDBUser分配建表的权限--*/ GRANT create table TO lenoDBUser 注意授权只能向数据库用户授权,而不是给登录帐户授权。而且数据库的权限仅限于当前数据库,如果希望访问其他数据库,还需要成为其他数据库的用户。所以,现在大家应该清楚了:登陆账号->数据库用户->访问权限,这三道关口就是SQL Server的安全模型。