第4章 账户和存取权限

4.1 SQL Server的验证模式

SQL Server对用户的访问进行两个阶段的检验:

  • 验证阶段(Authentication)
  • 许可确认阶段(Permission Validation) 用户验证通过后,登录到SQL Server上,系统检查用户是否有访问服务器上数据的权限。
SQL Server 2005 Database Engine管理者可以通过权限进行保护的实体的分层集合。这些实体称为“安全对象”。在安全对象中,最突出的是服务器和数据库,但可以在更细的级
别上设置离散权限。SQL Server通过验证主体是否已获得适当的权限来控制主体对安全对象执行的操作。 (这一段怎么怪怪的……)

4.1.1 Windows验证模式

Windows验证模式有以下主要优点:
  • 数据库管理员的工作可以集中在管理数据库上面,而不是管理用户账户。对用户账户的管理可以交给Windows去完成。
  • Windows有着更强的用户账户管理工具。可以设置账户锁定、密码期限等。如果不是通过定制来扩展SQL Server,SQL Server是不具备这些功能的。
  • Windows的组策略支持多个用户同时被授权访问SQL Server。
实际上,SQL Server是从 RPC协议连接中自动获取登录过程中的Windows用户账户信息的。多协议和命名管道自动使用RPC协议。因此,在客户和服务器间,使用上述网络库可
以使用Windows验证模式。
但是,应该注意的是,要使用多协议或者命名管道在客户和服务器将建立连接,必须满足以下两个条件中的一个:
  • 客户端的用户必须有合法的服务器上的Windows账户,服务器能够在自己的域中或者信任域中验证该用户。
  • 服务器启动了Guest账户,但是该方法会带来安全上的隐患,因而不是一个好的方法。

4.1.2 混合验证模式

使用哪个模式取决于在最初的通信时使用的网络库。如果一个用户使用的是TCP/IP Sockets进行登录验证,则将使用SQL Server验证模式;如果用户使用命名管道,则登录时将使用Windows验证模式。Windows验证模式适用于Windows组,它适用于命名管道的RPC网络库。混合验证模式适用于所有的网络库。
提 示:验证模式的选用通常与网络验证的模型和客户与服务器间的通信协议有关。如果网络主要是Windows网,则用户登录Windows时已经得到了确认,因此,使用Windows验证模式将减轻系统的工作负担。但是,如果网络主要是 Novell网络或者对等网,则使用SPX协议和SQL Server验证模式将是很方便的。因为,这种情况下,只需创建SQL Server登录账户,而不用创建Windows账户。

4.1.3 设置验证模式

4.2 账户和角色

在SQL Server中,账户有两种,一种是登录服务器的登录账户(login name),另外一种是使用数据库的用户账户(user name)。登录账户只是让用户登录到SQL Server中,登录名本身并不能让用户访问服务器中的数据库。要访问特定的数据库,还必须具有用户名。

4.2.1 服务器的登录账户

其中两个默认登录账户的含义如下:
  • BUILTIN\Administrators 凡是属于Windows中Administrators组的账户都允许登录SQL Server。
  • sa 超级管理员账户,允许SQL Server的系统管理员登录,此SQL Server的管理员不一定是Windows的管理员。
角色是一组用户所构成的组,可分为服务器角色和数据库角色。
服务器角色是负责管理和维护SQL Server的组,一般只会指定需要管理服务器的登录者属于服务器角色。SQL Server 2005在安装过程中定义几个固定的服务器角色,其具体权限如下:
  • sysadmin 全称为System Administrators,可以在 SQL Server中执行任何活动。
  • serveradmin 全称为Server Administrators,可以设置服务器范围的配置选项,关闭服务器。
  • setupadmin 全称为Setup Administrators,可以管理链接服务器和启动过程。
  • securityadmin 全称为Security Administrators,可以管理登录和创建数据库的权限,还可以读取错误日志和更改密码。
  • processadmin 全称为Process Administrators,可以管理在SQL Server中运行的进程。
  • dbcreator 全称为Database Creators,可以创建、更改和删除数据库。
  • diskadmin 全称为Disk Adminstrators,可以管理磁盘文件。
  • bulkadmin 全称为Bulk Insert Adminstrators,可以执行BULK INSERT(大容量插入)语句。
  • public public角色具有查看任何数据库的权限
提 示:属于Windows Adminstrators组的账户,在SQL Server 2005中被自动设置为sysadmin服务器角色。

4.2.2 数据库用户

每个登录账户可以在不同的数据库中各有一个用户账户
注 意:登录账户具有对某个数据库的访问权限,并不表示该登录账户对该数据库具有存取的权限。如果要对数据库中的对象进行插入及更新等操作,还需要设置用户账户的权限。
权限则包括以下几种:
  • Alter 授予更改特定安全对象的属性(所有权除外)的权限。当授予对某个范围的Alter权限时,也授予更改、创建或删除该范围内包含的任何安全对象的权限。例如,对架构的Alter权限包括在该架构中创建、更改和删除对象的权限。
  • Control 为被授权者授予类似所有权的功能。被授权者实际上对安全对象具有所定义的所有权限。
  • Delete 删除表或视图中的数据。
  • Insert 在表或视图中插入记录。
  • References 对表或视图进行引用。
  • Select 对表或视图的查询。
  • Take ownership 允许被授权者获取所授予的安全对象的所有权。
  • Update 对表或视图中的数据进行修改。
  • View definition 允许被授权者访问元数据。
Alter、Control和Take ownership的区别是什么?
---------------
元数据就是用来定义数据的数据。比如,有一条学生信息记录,其中包括字段姓名(name)、年龄(age)、性别(male)、班级(class)等,那么name、age、male、class就是元数据。通过它们的描述,一条关于学生信息的数据记录就产生;
------------------
4.2.3 角色
用户账户也可以分成组,称为数据库角色(Database Roles)
数据库角色应用于单个数据库,它包括一列Windows用户账户和组。当最终用户通过客户应用程序连接到分析服务器时,数据库角色中的规范即应用于他们对分析服务器上对象的访问。数据库角色不是用来授权或拒绝对于对象的管理访问。
在SQL Server中,数据库角色可分为两种:(这个分组怎么这么奇怪)
  • 服务器角色 由服务器账户组成的组,负责管理和维护SQL Server组。
  • 数据库角色 由数据库成员所组成的组,此成员可以是用户或者其他的数据库角色。
  • 应用程序角色 用来控制应用程序存取数据库,本身并不包含任何成员。

1. 数据库角色

public角色是最基本的数据库角色。其余9个默认数据库角色的含义如下:
  • db_owner 在数据库中有全部权限。
  • db_accessadmin 可以添加或删除用户ID。
  • db_securityadmin 可以管理全部权限、对象所有权、角色和角色成员资格。
  • db_ddladmin 可以发出ALL DDL,但不能发出GRANT(授权)、REVOKE或DENY语句。
  • db_backupoperator 可以发出DBCC、CHECKPOINT和BACKUP语句。
  • db_datareader 可以选择数据库内任何用户表中的所有数据。
  • db_datawriter 可以更改数据库内任何用户表中的所有数据。
  • db_denydatareader 不能选择数据库内任何用户表中的任何数据。
  • db_denydatawriter 不能更改数据库内任何用户表中的任何数据。
注意:dbo用户是指数据库的创建者

2. 应用程序角色

SQL Server中的安全系统在最低级别,即数据库本身上实现。无论使用什么应用程序与SQL Server通信,这都是控制用户活动的最佳方法。但是,有时必须自定义安全控制以
适应个别应用程序的特殊需要,尤其是当处理复杂数据库和含有大表的数据库时。
此外,可能希望限制用户只能通过特定应用程序(例如使用SQL查询分析器或MicrosoftExcel)来访问数据或防止用户直接访问数据。限制用户的这种访问方式将禁止用户使用应用程序(如SQL查询分析器)连接到SQL Server实例并执行编写质量差的查询,以免对整个服务器的性能造成负面影响。
应用程序角色和数据库角色的区别有以下3点:
  • 应用程序角色不包含成员。
  • 默认情况下,应用程序角色是非活动的,需要用密码激活。
  • 应用程序角色不使用标准权限。当一个应用程序角色被该应用程序激活以用于连接时,连接会在连接期间永久地失去数据库中所有用来登录的权限、用户账户、其他组或数据库角色。应用程序角色存在于该数据库中。因为应用程序角色只能应用于它们所存在的数据库中,所以连接只能通过授予其他数据库中guest用户账户的权限,获得对另一个数据库的访问。因此,如果数据库中没有guest用户账户,则连接无法获得对该数据库的访问。如果guest用户账户确实存在于数据库中,但是访问对象的权限没有显式地授予guest,则无论是谁创建了对象,连接都不能访问该对象。用户从应用程序角色中获得的权限一直有效,直到连接从SQL Server退出为止。
若要确保可以执行应用程序的所有函数,连接必须在连接期间失去应用于登录和用户账户或所有数据库中的其他组或数据库角色的默认权限,并获得与应用程序角色相关联的
权限。例如,如果应用程序必须访问通常拒绝用户访问的表,则应废除对该用户拒绝的访问权限,以使用户能够成功使用该应用程序。应用程序角色通过临时挂起用户的默认权限并只对它们指派应用程序角色的权限而克服任何与用户的默认权限发生的冲突。
下面是一个使用应用程序角色的例子:
假设用户Sue运行销售应用程序。该应用程序要求在数据库Sales中的表Products和Orders上有SELECT、UPDATE和INSERT权限,但Sue在使用任何其他工具访问Products或Orders表时不应有SELECT、INSERT或UPDATE权限。若要确保如此,可以创建一个拒绝Products和Orders表上的SELECT、INSERT或UPDATE权限的用户-数据库角色,然后将Sue添加为该数据库角色的成员。接着在Sales数据库中创建带有Products和Orders表上的SELECT、INSERT和UPDATE权限的应用程序角色。当应用程序运行时,指应用程序通过使用 sp_setapprole存储过程提供密码激活应用程序,并获得访问Products和Orders表的权限。如果Sue尝试使用除该应用程序外的任何其他工具登录到SQL Server实例,则将无法访问Products或Orders表。

3. public 数据库角色的权限

public数据库角色是每个数据库最基本的数据库角色,每个用户可以不属于其他9个固定数据库角色,但是至少会属于public数据库角色。当在数据库中添加新用户账户时,SQL Server会自动将新用户账户加入public数据库角色中。

4.2.4 用户和角色的权限问题

2. 用户分属不同角色
如果一个用户分属于不同的数据库角色,例如,用户User1既属于角色Role1,又属于角色Role2,则用户User1的权限基本上是以Role1和Role2的并集为准。但是只要有一个拒绝,则用户User1的权限就是拒绝。

4.4 小结

用户名的信息被存储在每个数据库中的系统表中。用户名的信息包括所有组的信息。
可以对表和视图授予查询、插入、修改和删除的权限,但是对存储过程只能授予执行的权限
-------------------
转自http://www.searchdatabase.com.cn/showcontent_36763.htm
       登录名:服务器方的一个实体,使用一个登录名只能进入服务器,但是不能让用户访问服务器中的数据库资源。每个登录名的定义存放在master数据库的syslogins表中
  用户名:一个或多个登录对象在数据库中的映射,可以对用户对象进行授权,以便为登录对象提供对数据库的访问权限。用户定义信息存放在每个数据库的sysusers表中。
  SQL SERVER把登录名与用户名的关系称为 映射。用登录名登录SQL SERVER后,在访问各个数据库时,SQLSERVER会自动查询此数据库中是否存在与此登录名关联的用户名,若存在就使用此用户的权限访问此数据库,若不存在就是用guest用户访问此数据库。
  一个登录名可以被授权访问多个数据库,但一个登录名在每个数据库中只能映射一次。即一个登录可对应多个用户,一个用户也可以被多个登录使用。
  链接或登录SQL Server服务器时是用的登录名而非用户名登录的,程序里面的链接字符串中的用户名也是指登录名。
   SQLSERVER中有几个特殊的登录名和用户名:
  我们常见的 dbo(用户名)是指以sa(登录名)或windows administration(Windows集成验证登录方式)登录的用户,也就是说数据库管理员在SQLSERVER中的用户名就叫dbo,而不叫 sa,这一点看起来有点蹊跷,因为通常用户名与登录名相同(不是强制相同,但为了一目了然通常都在创建用户名时使用与登录名相同的名字),例如创建了一个登录名称为me,那么可以为该登录名me在指定的数据库中添加一个同名用户,使登录名me能够访问该数据库中的数据.当在数据库中添加了一个用户me 后,之后以me登录名登录时在该数据库中创建的一切对象(表,函数,存储过程等)的所有者都为me,如me.table1,me.fn_test(),而不是dbo.table1,dbo.fn_test().
  SQL Server中还有一个特殊的数据库角色 public,它存在于每一个数据库中,包括系统数据库,如master、msdb、model和用户数据库,数据库的所有用户都属于public角色,并且不能从public角色中删除。
  在SQLSERVER数据库中,guest帐户是特殊的用户帐户。如果用户使用USE database语句访问的数据库中没有与此用户关联的帐户,此用户就与guest用户相关联。
---------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值