
第12章SQL Server的安金管理 本章将从安全性的角度介绍了对SOLServer系统的基本管理方法,因为无论对于系统管 理员还是数据库偏程人员,甚至树于每个用户,数据库系统的安全性都至关重要,通过对本 章的学习,读者将会了解到要想确保系统的安全性,应谈使用用户账户,同时还应该对紧户 授予相应的权限。对用户,角色和权限的管理可以通过金业管理器来操作。也可以使用系饶 存销过程来实现。 12.1 SQLServer2000的安全认证模式 用户使用SCLServer时,需要经过两个安全性阶段:身份验证和权限队证: ()身份验证阶段:用户在S贝5rer上获得对任何数据库的访间权限之前,必须登录到 SQLServer上,并且棱认为是合法的.SQLServer或者indows2000对用户进行险证,如果 验证通过,用户就可以连接到SOServer上,否则,服务器将拒绝用户登承。从而保证了系 统安金。 (2O权限认证阶段:身份险证阶段系统贝检的用户是否有连接SQLServer实例的权力,如 果身份验证通过了,只表示用户可以连接SqSr实例,否则系饶将拒地用户的连接。然 后需要检验用户是否有访刊服务器上数据库的权限,为此需要授予每个数据库中晚射到用户 叠录的帐户访问权限。权限认正线可以控制用户在数据库中进行的操作。 12.1.1.身份0证 在验证阶段,系统是对用户程录进行验任,SQLServer和indows2000是结合在一起的, 因此产生了两种验证模式:indows身份验证模式和混合身舒验证模式(windows身份验证和 SQLServer身份0i证). L.indows身份险证模式 indows身份验证枝式是使用1ks操作系统的安全机制验证用户身份,只要用户能 够通过ida2000用户帐户验证,即可连接到SQLServer,这种验证模式只使用于能够提 供有效身份单正的indows操作系统,在其他操作系统下无法使用. indow系身份验证核式下,SQLServer检测当前使用的1 ndows用户账号,并在 syslogins表中查找该账号,以确定该账号是否有权登录。在这种方式下,用户不必提俱密 码或者登录名让SQL.Server验证。windows检证模式下主要有以下优点: ①数据库管理员的工作可以集中在管理数据库上面,而不是管理用户账户,对用户账户 的管理可以交给ind0ws2000去完成
第 12 章 SQL Server 的安全管理 本章将从安全性的角度介绍了对 SQLServer 系统的基本管理方法,因为无论对于系统管 理员还是数据库编程人员,甚至对于每个用户,数据库系统的安全性都至关重要。通过对本 章的学习,读者将会了解到要想确保系统的安全性,应该使用用户账户,同时还应该对账户 授予相应的权限。对用户、角色和权限的管理可以通过企业管理器来操作,也可以使用系统 存储过程来实现。 12.1SQLServer2000 的安全认证模式 用户使用 SQLServer 时,需要经过两个安全性阶段:身份验证和权限认证。 ⑴身份验证阶段:用户在 SQLServer 上获得对任何数据库的访问权限之前,必须登录到 SQLServer 上,并且被认为是合法的。SQLServer 或者 Windows2000 对用户进行验证。如果 验证通过,用户就可以连接到 SQLServer 上,否则,服务器将拒绝用户登录。从而保证了系 统安全。 ⑵权限认证阶段:身份验证阶段系统只检验用户是否有连接 SQLServer 实例的权力,如 果身份验证通过了,只表示用户可以连接 SQLServer 实例,否则系统将拒绝用户的连接。然 后需要检验用户是否有访问服务器上数据库的权限,为此需要授予每个数据库中映射到用户 登录的帐户访问权限,权限认证就可以控制用户在数据库中进行的操作。 12.1.1.身份验证 在验证阶段,系统是对用户登录进行验证。SQLServer 和 Windows2000 是结合在一起的, 因此产生了两种验证模式:Windows 身份验证模式和混合身份验证模式(windows 身份验证和 SQLServer 身份验证)。 1.Windows 身份验证模式 Windows 身份验证模式是使用 Windows 操作系统的安全机制验证用户身份,只要用户能 够通过 Windows2000 用户帐户验证,即可连接到 SQLServer。这种验证模式只使用于能够提 供有效身份验证的 Windows 操作系统,在其他操作系统下无法使用。 Windows 身份验证模式下,SQLServer 检测当前使用的 Windows 用户账号,并在 syslogins 表中查找该账号,以确定该账号是否有权登录。在这种方式下,用户不必提供密 码或者登录名让 SQLServer 验证。windows 验证模式下主要有以下优点: ①数据库管理员的工作可以集中在管理数据库上面,而不是管理用户账户。对用户账户 的管理可以交给 Windows2000 去完成

②1dow2000有着更强的用户账户管理工具,可以设置账户绩定,密码期限等。如果 不是通过定制来打展SOLServer,QLServer是不具答这些功能的. ③1 ndows2000的组策略支持多个用户问时鼓授权访问S0 LServer。 但是,值得注意的是,要在客户和服务器间建文连接,使用该验正模式时。必巍满足以 下两个条件中的一个: ①客户端的用户必须有合法的服务器上的1nd0s2000账户,服务墨能够在自己的减中 或者信任城中验证该用户 ②服务器启动了Gust账户,但是该方法会带来安全上的隐患,因而不是一个好的方法. 2混合身的验证被式 混合身份验证慎式使用户可以使用indows身份验证或SQLServer身份验证与 SQLServer实例连接.它将区分用户帐号在indows操作系统下是否可信,对于可信连接用 户,系饶直接采用1ndom%身份验证机制,否则SQServer会通过帐户的存在性和密码的匹 配性白行进行验证。例如,允许某些非可信的indows用户(Internet客户)连接到 SqL5 erver,它通过检查是否已设置SC5 erver登录帐户以及输入的密码是否与段置的密码 相符米进行身份险证,如果SqS©ner来设置登录据户,则身份险证将失败,而且月户会收 到错误信息。 使用哪个核式取决于在最初的通信时使用的网络库,如果一个用户使用的是 TCP/IPSockets进行登录验证,则将使用SQLServer验证横式:如果用户使用命名管道,则 叠录时将使用1s验证核式。这种树式能更好地适应用户的各种环境。但是对于 indows9X系列的操作系统,只能使用SqL5 erver验证模式。SOLServer验证模式下,处理 叠录的过程为:用户在输入叠录名和密码后,SOLServer在系统注册表中检测输入的理录名 和密码。如果输入的登录名存在,而且密码也正确,就可以登录到SSev©r上. 混合验证模式具有以下优点: ①创建了indows2000之上的另外一个安全层次. ②支持更大礼围的用户,如非indows客户、mix/1inux用户等。 同一个应用程序可以使用单个的SQLServer登录和口令, 由此可以看出:验证模式的途择通常与网络验证的横里和客户与服务器间的通信协议有 关。如果网路主要是indows2000网,则用户登录到indows2000时已经得到了确认,因此, 使用Windows验证模式将减轻系统的工作负担:但是,对于连接到indowsServer2O00客户 瑞以外的其他客户端。必须使用SQLServer身粉验证。例如unx/小1ux网洛用户,则需要
②Windows2000 有着更强的用户账户管理工具。可以设置账户锁定、密码期限等。如果 不是通过定制来扩展 SQLServer,SQLServer 是不具备这些功能的。 ③Windows2000 的组策略支持多个用户同时被授权访问 SQLServer。 但是,值得注意的是,要在客户和服务器间建立连接,使用该验证模式时,必须满足以 下两个条件中的一个: ①客户端的用户必须有合法的服务器上的 Windows2000 账户,服务器能够在自己的域中 或者信任域中验证该用户。 ②服务器启动了 Guest 账户,但是该方法会带来安全上的隐患,因而不是一个好的方法。 2.混合身份验证模式 混合身份验证模式使用户可以使用 Windows 身份验证或 SQLServer 身份验证与 SQLServer 实例连接。它将区分用户帐号在 Windows 操作系统下是否可信,对于可信连接用 户,系统直接采用 Windows 身份验证机制,否则 SQLServer 会通过帐户的存在性和密码的匹 配性自行进行验证。例如,允许某些非可信的 Windows 用户(Internet 客户)连接到 SQLServer,它通过检查是否已设置 SQLServer 登录帐户以及输入的密码是否与设置的密码 相符来进行身份验证。如果 SQLServer 未设置登录账户,则身份验证将失败,而且用户会收 到错误信息。 使用哪个模式取决于在最初的通信时使用的网络库。如果一个用户使用的是 TCP/IPSockets 进行登录验证,则将使用 SQLServer 验证模式;如果用户使用命名管道,则 登录时将使用 Windows 验证模式。这种模式能更好地适应用户的各种环境。但是对于 Windows9X 系列的操作系统,只能使用 SQLServer 验证模式。SQLServer 验证模式下,处理 登录的过程为:用户在输入登录名和密码后,SQLServer 在系统注册表中检测输入的登录名 和密码。如果输入的登录名存在,而且密码也正确,就可以登录到 SQLServer 上。 混合验证模式具有以下优点: ①创建了 Windows2000 之上的另外一个安全层次。 ②支持更大范围的用户,如非 Windows 客户、unix/linux 用户等。 ③一个应用程序可以使用单个的 SQLServer 登录和口令。 由此可以看出:验证模式的选择通常与网络验证的模型和客户与服务器间的通信协议有 关。如果网络主要是 Windows2000 网,则用户登录到 Windows2000 时已经得到了确认,因此, 使用 Windows 验证模式将减轻系统的工作负担;但是,对于连接到 WindowsServer2000 客户 端以外的其他客户端,必须使用 SQLServer 身份验证。例如 unix/linux 网络用户,则需要

使用SQLServer验证模式. 12.1.2权限认证 为了防止不合理的使用面迹成数据的港密和破坏,Sq5m©r数据库管理系统除了使用 身份验证方法来限制用户进入数据库系统,还使用权限认证来控制用户对数据库操作。 当用户身份通过了验证连接到Sg5 erver实例后,在用户可以访月的每个数据库中都要 求单鞋的用户帐户,对于没有帐户的数据库,将无法访月, 此时,用户虽然可以发运各种Transact--SQ.语句命令,但是这些操作命令在数据库中 是否能够成功的执行,还取读于该用户帐户在该数据库中对这些操作的权限设置。如果发出 操作命令的用户没有执行该语句的权限或者没有访问该对象的权限,则SQLServer将不会执 行该操作命令,所以没有通过数据库中的权限认证,即使用户连接到了SSV©r示例上, 也无法使用数据库。 一般来说,数据库的所有者或者对象的所有者可以对其他数据岸用户授予或者解除权 限。 12,2创建和管理安全账户 12.2.1创建安全账户 上.登录紧户和用户账户 不管使用哪种单证方式,都必须首先具答有效的登录账户.SQLServer有三个默认的用 户据户:sn,[LTINMAdministrators和uest,其中s是系统管理员 (SystemAdninistrators)的简称,允许SQLServer的系统管理员登录,并拥有全部的系统权 限和数据库权限:UILTINVdainistrators是SQLServer提供给indo8系饶管理员的一 个默认的用户账户,扣有全部的系统权限和数据库权限,凡是indc雪sXTServer/20O0中 Administrators组的账号都允许登录SOLServeroguest是一个默认的访问系统的用户账户, 用有一般用户权限。 S刘LServer用户分为两级:登录张户和用户账户。其中置豪账户是附加到SOLServer本 身的能力,所有的登录账户信息都被存故在系统表syslogins中,而用户账户是由SQLServer 管理的。所有的用户账户都存放在系统表sys3sers中。 每个用户经须通过登录账户建立自己的连接能力(身份险证),以便获得对SQLServer 实例的访问权限。然后,该登录必须峡射到用于控制在数据库中所执行的活动(权限验证) 的S0 Server用户账户,因此,单个登录爽射到在该登录正在访间的每个数据库中创建的一 个用户账户。如果数据库中没有用户账户,则即使用户能够连接到SgS©rver实例中,也无
使用 SQLServer 验证模式。 12.1.2 权限认证 为了防止不合理的使用而造成数据的泄密和破坏,SQLServer 数据库管理系统除了使用 身份验证方法来限制用户进入数据库系统,还使用权限认证来控制用户对数据库操作。 当用户身份通过了验证连接到 SQLServer 实例后,在用户可以访问的每个数据库中都要 求单独的用户帐户,对于没有帐户的数据库,将无法访问。 此时,用户虽然可以发送各种 Transact-SQL 语句命令,但是这些操作命令在数据库中 是否能够成功的执行,还取决于该用户帐户在该数据库中对这些操作的权限设置。如果发出 操作命令的用户没有执行该语句的权限或者没有访问该对象的权限,则 SQLServer 将不会执 行该操作命令。所以没有通过数据库中的权限认证,即使用户连接到了 SQLServer 示例上, 也无法使用数据库。 一般来说,数据库的所有者或者对象的所有者可以对其他数据库用户授予或者解除权 限。 12.2 创建和管理安全账户 12.2.1 创建安全账户 1.登录账户和用户账户 不管使用哪种验证方式,都必须首先具备有效的登录账户。SQLServer 有三个默认的用 户账户:sa、BUILTIN\Administrators 和 guest。其中 sa 是系统管理员 (SystemAdministrators)的简称,允许 SQLServer 的系统管理员登录,并拥有全部的系统权 限和数据库权限;BUILTIN\Administrators 是 SQLServer 提供给 Windows 系统管理员的一 个默认的用户账户,拥有全部的系统权限和数据库权限,凡是 WindowsNTServer/2000 中 Administrators 组的账号都允许登录 SQLServer。guest 是一个默认的访问系统的用户账户, 拥有一般用户权限。 SQLServer 用户分为两级:登录账户和用户账户。其中登录账户是附加到 SQLServer 本 身的能力,所有的登录账户信息都被存放在系统表 syslogins 中。而用户账户是由 SQLServer 管理的,所有的用户账户都存放在系统表 sysusers 中。 每个用户必须通过登录账户建立自己的连接能力(身份验证),以便获得对 SQLServer 实例的访问权限。然后,该登录必须映射到用于控制在数据库中所执行的活动(权限验证) 的 SQLServer 用户账户。因此,单个登录映射到在该登录正在访问的每个数据库中创建的一 个用户账户。如果数据库中没有用户账户,则即使用户能够连接到 SQLServer 实例中,也无

法访月该数据库。所以,在M1os0fti0s000张户(用户或组)可以访问数据库之前, 必须为其授子连接到SQLServer实例的权限。 在数据库中是使用用户账户来标识用户的,并且数据库中对象的全部权限和所有权由用 户账户来控制,用户张户与数据库相关,登柔账户本身并不提供访问数据库对象的用户权限。 当一个登录账户与每个数据库中的一个用户感户相关联后,使用该登录账户连接 SQLServer,方能访问数据库中的对象。默认情况下,登录账户与数据库中的则est用户账 户相关联,但是,如知果数据岸中没有guest用户账户,则不能访问该数据岸,除非它已与一 个有效的用户账户相关联。 在SQLServer数据库中,ues对账户是特床的用户账户。如果用户使用USEdatabase语 句访日的数据库中没有与此用户关联的账户,此用户就与es1用户相关联。没有特定账户 的用户可以使用es1账户登录访问数据库。贝有在满是下列两个条件时,登录账户才会与与 est用户相关联 ()登录有访问Sg5er实例的权限,但没有通过白已的用户账户访间数据岸的权限。 (2)数据库中含有uest用户账户. 默认情况下,新建的数据库中没有聊st用户账户。可以将权限应用到用户,就 如同它是任何其他用户账户一样。可以在除ster和t国db外(在这两个数据库中它必须 始换存在)的所有数据库中漆加成刚除es1用户。 用户账户在定义时便与一个登录账户相关联。下面介绍登录账户与用户账户的建立和管 理方法。 2创建SQLServer登录账户 (I)使用企业管理器添加Sg5 erver登录 ①在SQLServer的企业管理器下,履开“SQLServer组”文件夹,找到需要建立登录账 号的服务器并展开其文件夹,。再展开“安全性”文件夹。在“登录”选项上右击鼠标,在出 现的快徒菜单中单击“新建登录”菜单命令,打开“SSvr登录属性-新建登录对话 框,如图12-1所示. ②如果遗择“d5身份验证”单选钮。则“名称”文本框后面的按钮技激话。单击 可打开选择indows用户的对话根,如图12-2所示。从其对话≤中可选择indows系统的 用户作为SQLServer的登录撒号.不过,在这之前需要单击“开始”一“设置”一“控制而 板”→“管理工具”→“计算机管理”→右击“本地用户和用户:用户”一遗中“新用户”, 如图12-3所示一→在图12-4所示的“新用户”留口中,输入用户名和密码等
法访问该数据库。所以,在 MicrosoftWindows2000 账户(用户或组)可以访问数据库之前, 必须为其授予连接到 SQLServer 实例的权限。 在数据库中是使用用户账户来标识用户的,并且数据库中对象的全部权限和所有权由用 户账户来控制,用户账户与数据库相关。登录账户本身并不提供访问数据库对象的用户权限。 当一个登录账户与每个数据库中的一个用户账户相关联后,使用该登录账户连接 SQLServer,方能访问数据库中的对象。默认情况下,登录账户与数据库中的 guest 用户账 户相关联,但是,如果数据库中没有 guest 用户账户,则不能访问该数据库,除非它已与一 个有效的用户账户相关联。 在 SQLServer 数据库中,guest 账户是特殊的用户账户。如果用户使用 USEdatabase 语 句访问的数据库中没有与此用户关联的账户,此用户就与 guest 用户相关联。没有特定账户 的用户可以使用 guest 账户登录访问数据库。只有在满足下列两个条件时,登录账户才会与 guest 用户相关联: ⑴登录有访问 SQLServer 实例的权限,但没有通过自己的用户账户访问数据库的权限。 ⑵数据库中含有 guest 用户账户。 默认情况下,新建的数据库中没有 guest 用户账户。可以将权限应用到 guest 用户,就 如同它是任何其他用户账户一样。可以在除 master 和 tempdb 外(在这两个数据库中它必须 始终存在)的所有数据库中添加或删除 guest 用户。 用户账户在定义时便与一个登录账户相关联。下面介绍登录账户与用户账户的建立和管 理方法。 2.创建 SQLServer 登录账户 ⑴使用企业管理器添加 SQLServer 登录 ①在 SQLServer 的企业管理器下,展开“SQLServer 组”文件夹,找到需要建立登录账 号的服务器并展开其文件夹,再展开“安全性”文件夹,在“登录”选项上右击鼠标,在出 现的快捷菜单中单击“新建登录”菜单命令,打开“SQLServer 登录属性-新建登录”对话 框,如图 12-1 所示。 ②如果选择“Windows 身份验证”单选钮,则“名称”文本框后面的按钮被激活,单击 可打开选择 Windows 用户的对话框,如图 12-2 所示。从其对话框中可选择 Windows 系统的 用户作为 SQLServer 的登录帐号。不过,在这之前需要单击“开始”→“设置”→“控制面 板”→“管理工具”→“计算机管理”→右击“本地用户和用户•用户”→选中“新用户”, 如图 12-3 所示→在图 12-4 所示的“新用户”窗口中,输入用户名和密码等

③如果单击“SQLServer身份验证”单这钮,线在“名称”文木框中输入要创建的登录 账号名称,例如“stud_user”,在“身份验证”选项组中,并输入密码,然后在“默认设置" 这项组中,选择数据数据库列表中的某个数据库,例如“st聊nt”,表示该叠素账号赋队登 录到student数据库中。 ①在图12-1对话框中,单击“服务器角色”标签,打开“服务器角色”标签页,在此 标签页中,可以设置登录账号所属的服务器角色: 回在图12-1对话根中,单击“数暴库访何”标签,打开“数据库访付”标签页。在此 标签页中可选择登录账号可以访问的数据库,即选中所需要的数据库左面的复选框。 ©设置完毕后,单击“确定”按细,即可完成登录账号的创建, (的使用系统存储过程建立登录账户和用户账户 要在SQLServer中添如登录账户,可以使用系统存储过程sp_grantlogin,使indows 用户或组据户得以使用inda器身份验正莲接到SQL.Server上, s知_grantlogin存储过程的语法格式如下: sp_grantlogin[eloginame"]'login' 其中,参数[loginane-]'login'是要添加的indows用户或组的名称,idos组 和用户必须用城名限定,格式为“城用户”,10以in的数据类型为sysnane,没有默认值。 【例12.1】向酯统中添加一个域名为stud_domain的1ndos用户stud_user,可执行 下列代码: EXECsp_grantlogin'computer\stud_adnin' 尽管执行上述代马后,登录可以连接到SqL5er,但是,除辈在每个登录必须访H的 数据库中都创建该登录的用户账户,否则对用户数据库的访门仍会被拒绝。要在每个用户数 据库中创建用户账户,可以使用s印ntdhaccess存储过程为登录账户授子访月数据岸的 权限。 【例122】在当前数据库中为indows用户computer\stud_adnin添如账户,并取名 为user_minager,可执行下列代码: EXECsp_grantdbaccess'corputer\stud_admin',user_minager' 除了使用sp_grantlogin系统存储过程之外,SQLServer还提供sp_addlogin系统存错 过程来完成同样的操作。 利用s印_addlogin存储过程创建登录紫号的语法格式为: sp_addlogin [eloginame=]'login'[.[epasswd=]'passvord'][,[edefdb=]'database']
③如果单击“SQLServer 身份验证”单选钮,就在“名称”文本框中输入要创建的登录 账号名称,例如“stud_user”,在“身份验证”选项组中,并输入密码,然后在“默认设置” 选项组中,选择数据数据库列表中的某个数据库,例如“student”,表示该登录账号默认登 录到 student 数据库中。 ④在图 12-1 对话框中,单击“服务器角色”标签,打开“服务器角色”标签页,在此 标签页中,可以设置登录账号所属的服务器角色。 ⑤在图 12-1 对话框中,单击“数据库访问”标签,打开“数据库访问”标签页。在此 标签页中可选择登录账号可以访问的数据库,即选中所需要的数据库左面的复选框。 ⑥设置完毕后,单击“确定”按钮,即可完成登录账号的创建。 ⑵使用系统存储过程建立登录账户和用户账户 要在 SQLServer 中添加登录账户,可以使用系统存储过程 sp_grantlogin,使 Windows 用户或组账户得以使用 Windows 身份验证连接到 SQLServer 上。 sp_grantlogin 存储过程的语法格式如下: sp_grantlogin[@loginame=]’login’ 其中,参数[@loginame=]’login’是要添加的 Windows 用户或组的名称。Windows 组 和用户必须用域名限定,格式为“域\用户”,login 的数据类型为 sysname,没有默认值。 【例 12.1】向系统中添加一个域名为 stud_domain 的 Windows 用户 stud_user,可执行 下列代码: EXECsp_grantlogin’computer\stud_admin’ 尽管执行上述代码后,登录可以连接到 SQLServer,但是,除非在每个登录必须访问的 数据库中都创建该登录的用户账户,否则对用户数据库的访问仍会被拒绝。要在每个用户数 据库中创建用户账户,可以使用 sp_grantdbaccess 存储过程为登录账户授予访问数据库的 权限。 【例 12.2】在当前数据库中为 Windows 用户 computer\stud_admin 添加账户,并取名 为 user_manager,可执行下列代码: EXECsp_grantdbaccess’computer\stud_admin’,’user_manager’ 除了使用 sp_grantlogin 系统存储过程之外,SQLServer 还提供 sp_addlogin 系统存储 过程来完成同样的操作。 利用 sp_addlogin 存储过程创建登录账号的语法格式为: sp_addlogin[@loginame=]’login’[,[@passwd=]’password’][,[@defdb=]’database’]

[[edeflanguage=]'language'][[esid-]sid][[eencryptopt-]' encryption_option'] 其中,【01 oginane-]'1ogin'为登录账号名称,passvd-]门”password”为登录密码, [@defdt-]”database'为登录的默认数据岸名,[edeflanguage-]'langasge'为使用的语 言,【si中]sid为安全标识号,[eencryptopt=】”encryption_option'为指定当密到存铺 在系统表中时,密玛是否要加密。 注意:使用的语言如果指定为山,则表示使用系统默认语言, 【例123】建立一个名为stud_login的登录账号,并将登录张号加入到数据库student 中。 USEstudent EXECsp_addlogin'stud_login',computer',student'NULL EXECsp_adduser'stud_login' 运行结果显示:己创建新登录,已向”stud1ogin'授予数据库访问权。 【例124】利用s印_addlogi通命令建立SQLserver登录ID为y_l0gin。由于没有指定 passwd和defdb参数,因此y_login的口令是ML,默认数据岸是naster,. EXECsp_addlogimay_login 运行结果显示:已创建新登录。 及创建数据库的用户 由上可知,SQLServer账号有两种:一种是登录服务卷的登录紧号(1 oginnane),另外 一种是使用数据库的用户账号(sema),登录账号是指能登录到SQLServer的账号,属于 服务器的层面。它本身并不能让用户访问服务器中的数据库,而登录者要使用服务器中的数 据库时。必须要有用户账号才能够存取数据库。就如月公可门口先刷卡进入(登柔服务器), 然后再拿钥是打开白己的办公室(进入数据库)一样。用户名要在特定的数据岸内创建,并关 联一个叠录名(当一个用户创建时,必须关暖一个登录名》。用户定义的信息存故在服务器的 每个数据库的sy5s表中,用户没有密码同它相关眠。通过授权给用户米指定用户可以 访可的数据库对象的权限。 一个SqSv©r的登录据号贝有成为数据库的用户时,才有对数据库请月权限。在安装 SQLServer后,联认数据库如:steT,t0印h、s山等包含两个用户,叠0和uest。任 何一个登录账号都可以通过u5(用户账号来存取相应的数据库。但是当新建一个数据库 时,默认只有止0用户账号面没有uest用户账号。每个登录账号在一个数据库中贝能有一
[,[@deflanguage=]’language’][,[@sid=]sid][,[@encryptopt=]’ encryption_option’] 其中,[@loginame=]’login’为登录账号名称,[@passwd=]’password’为登录密码, [@defdb=]’database’为登录的默认数据库名,[@deflanguage=]’language’为使用的语 言,[@sid=]sid 为安全标识号,[@encryptopt=]’encryption_option’为指定当密码存储 在系统表中时,密码是否要加密。 注意:使用的语言如果指定为 NULL,则表示使用系统默认语言。 【例 12.3】建立一个名为 stud_login 的登录账号,并将登录账号加入到数据库 student 中。 USEstudent EXECsp_addlogin’stud_login’,’computer’,’student’,NULL EXECsp_adduser’stud_login’ 运行结果显示:已创建新登录,已向’stud_login’授予数据库访问权。 【例 12.4】利用 sp_addlogin 命令建立 SQLserver 登录 ID 为 my_login。由于没有指定 passwd 和 defdb 参数,因此 my_login 的口令是 NULL,默认数据库是 master。 EXECsp_addloginmy_login 运行结果显示:已创建新登录。 3.创建数据库的用户 由上可知,SQLServer 账号有两种:一种是登录服务器的登录账号(loginname),另外 一种是使用数据库的用户账号(username)。登录账号是指能登录到 SQLServer 的账号,属于 服务器的层面,它本身并不能让用户访问服务器中的数据库,而登录者要使用服务器中的数 据库时,必须要有用户账号才能够存取数据库。就如同公司门口先刷卡进入(登录服务器), 然后再拿钥匙打开自己的办公室(进入数据库)一样。用户名要在特定的数据库内创建,并关 联一个登录名(当一个用户创建时,必须关联一个登录名)。用户定义的信息存放在服务器的 每个数据库的 sysusers 表中,用户没有密码同它相关联。通过授权给用户来指定用户可以 访问的数据库对象的权限。 一个 SQLServer 的登录账号只有成为数据库的用户时,才有对数据库访问权限。在安装 SQLServer 后,默认数据库如:master、tempdb、msdb 等包含两个用户:dbo 和 guest。任 何一个登录账号都可以通过 guest 用户账号来存取相应的数据库。但是当新建一个数据库 时,默认只有 dbo 用户账号而没有 guest 用户账号。每个登录账号在一个数据库中只能有一

个用户账号,目是每个登欢账号可以在不同的数据库中各有一个用户账号。如果在新建登求 账号过程中,指定对菜个数据库具有存取权限,则在该数据库中将自动创建一个与登录账号 同名的用户账号。 注意 ①aster和tc印b数据库中的est用户景号不能刷除,而其他数据库中的uest用 户账号可以副除。因为str数据库中记录了所有的系统信息,每个登录的用户若没有特 别指定数据岸,默认都是使用ster数据岸。而t即b数据岸是临时使用的数据库,所有 与服务器连接的数据都会存储在该处,因此也必须提供四st用户账号。 ②登录账号具有对某个数据库的访问权限,并不表示该登录账号对数据库具有存取的权 限。如果要对数据岸的对象透行插入,更新等操作,还香要设置用户账号的权限。 ()使用企业管理器创建数据库的用户 ①在金业管理器中,展开SQLServer组及其服务器,在“数据库”文件夹中,晨开某一 量据岸,例如student的文件克,然后在“用户“选项上右击,在弹出的快建菜单中选释“新 建数据库用户”金令,打开新建用户对话框。 ②单击“登录名”下拉列表框右端的下拉情头,意择“stud10gn”登录账号,此时“用 户名”文本框中自动显示为“stud1agin”。可以更改“用户名”文本框中的用户名,也可 以在“数据库角色成员”列表根中这择新建用户应该属于的数据库角色。 ③设置完毕后,单击“确定”按细,即可在student数据库中创建一个新的用户账号, 如果不想创建用户账号,单击“取清”按组即可。 ()使用存储过程创建数据库的用户 ①使用sp_grantdbaccess 语法格式: sp_grantdbaccess[eloginane=]'login'[[emame_in_db=]'name_in_db'[OUTPUT]] 其中,[1 ogina可”login'表示当前数据库中新米户的登录名称,如果是indows 组和用户,则必须用域名限定。登录不能使用数据库中已有的账户作为别名 [na国_ndh=]”na_inb”【0TUT]表示数据库中紧户的名称,na_indh的同 认植为山。知果没有番定de角的值,即将其指定为具有MLL值的OUT变量, 则使用登录名称作为该账户的名称。 ②使用却_nd血s0r 语法格式tsp_ad蜘ser[eloginame=]'login'[,【nae_indh-习'user'][,[egrpnane=]
个用户账号,但是每个登录账号可以在不同的数据库中各有一个用户账号。如果在新建登录 账号过程中,指定对某个数据库具有存取权限,则在该数据库中将自动创建一个与登录账号 同名的用户账号。 注意: ①master 和 tempdb 数据库中的 guest 用户账号不能删除,而其他数据库中的 guest 用 户账号可以删除。因为 master 数据库中记录了所有的系统信息,每个登录的用户若没有特 别指定数据库,默认都是使用 master 数据库。而 tempdb 数据库是临时使用的数据库,所有 与服务器连接的数据都会存储在该处,因此也必须提供 guest 用户账号。 ②登录账号具有对某个数据库的访问权限,并不表示该登录账号对数据库具有存取的权 限。如果要对数据库的对象进行插入、更新等操作,还需要设置用户账号的权限。 ⑴使用企业管理器创建数据库的用户 ①在企业管理器中,展开 SQLServer 组及其服务器,在“数据库”文件夹中,展开某一 数据库,例如 student 的文件夹,然后在“用户”选项上右击,在弹出的快捷菜单中选择“新 建数据库用户”命令,打开新建用户对话框。 ②单击“登录名”下拉列表框右端的下拉箭头,选择“stud_login”登录账号,此时“用 户名”文本框中自动显示为“stud_login”。可以更改“用户名”文本框中的用户名,也可 以在“数据库角色成员”列表框中选择新建用户应该属于的数据库角色。 ③设置完毕后,单击“确定”按钮,即可在 student 数据库中创建一个新的用户账号。 如果不想创建用户账号,单击“取消”按钮即可。 ⑵使用存储过程创建数据库的用户 ①使用 sp_grantdbaccess 语法格式: sp_grantdbaccess[@loginame=]’login’[,[@name_in_db=]’name_in_db’[OUTPUT]] 其中,[@loginame=]’login’表示当前数据库中新账户的登录名称。如果是 Windows 组和用户,则必须用域名限定。登录不能使用数据库中已有的账户作为别名。 [@name_in_db=]’name_in_db’[OUTPUT]表示数据库中账户的名称。name_in_db 的默 认值为 NULL。如果没有指定 name_in_db 的值,即将其指定为具有 NULL 值的 OUTPUT 变量, 则使用登录名称作为该账户的名称。 ②使用 sp_adduser 语法格式:sp_adduser[@loginame=]’login’[,[@name_in_db=]’user’][,[@grpname=]’

grOUP'】 其中,[e1 oginane]'1ogin为登录名称;[tnae_indb门]'user’为用户账号: 【pma0=”rop”为组成所属的数据库角色,新用户自动地成为其成员。 【例125】向student数据库中,添加一个名称为teach_aser的用户账号。 USEstudent 0国 EXECsp_addlogin'teach_login',office','student',NULL 00 EXECsp_adduser'teach_login',teach_user','db_owmer' 这果s知addlogin只是源加了一个登录张号,只能登录到SQLServer,并不对student 数据库具有存取权限,所以,还需要刊用sp_adduser将登录账号如入到指定数据岸中才行. (国设置数据库用户账号的权限 在创建数据库用户账号对话框中,当新建一个新的用户账号时,“登录名”右侧的“权 限“按组是灰色的,表示不能在创建数据岸用户账号的同时设置其权限。但是可以在创建后 通过其属性对话框米设置其权限,步露如下: ⊙在金业管理图的右窗格中的用户账号上单击鼠标右健,然后选释“属性”命令,打开 “数据库用户属性”对话框。 ②在“数据库用户属性”对话框中,单击“权限”按银,打开权限设置对话框。在此对 话框中。可以设置用户对数据库对象所具有的权限。在“对象”列中,显示了数据库中所有 的对象。面“所有者”列则显示了相应对象的所有者。其后的6列则是对量据岸对象的操作, 具体含义如下: SECT:对表或者视图的查询 INSERT:在表域者视图中插入记录 T正:对表或者视图中的数据修改 ETE:刷除表或者视图中的数据 EC:执行存储过程 尿I:eelarativeReferemtialIntegrity,可对表的外键加上限制,以达成表的参到完 整性。对某个数据岸对象而言,如果选中对应的复选熙,则表示具有对该对象进行相应操作 的权限。每个复选框具有3种状态。空白时表示未指定权限,或权限还原到未设置状态:当 打“√”时表示具有该权限:当打“1”时,表示不具有该权限
group’] 其中,[@loginame=]’login’为登录名称;[@name_in_db=]’user’为用户账号; [@grpname=]’group’为组或所属的数据库角色,新用户自动地成为其成员。 【例 12.5】向 student 数据库中,添加一个名称为 teach_user 的用户账号。 USEstudent GO EXECsp_addlogin’teach_login’,’office’,’student’,NULL GO EXECsp_adduser’teach_login’,’teach_user’,’db_owner’ 这里 sp_addlogin 只是添加了一个登录账号,只能登录到 SQLServer,并不对 student 数据库具有存取权限,所以,还需要利用 sp_adduser 将登录账号加入到指定数据库中才行。 ⑶设置数据库用户账号的权限 在创建数据库用户账号对话框中,当新建一个新的用户账号时,“登录名”右侧的“权 限”按钮是灰色的,表示不能在创建数据库用户账号的同时设置其权限。但是可以在创建后 通过其属性对话框来设置其权限,步骤如下: ①在企业管理器的右窗格中的用户账号上单击鼠标右键,然后选择“属性”命令,打开 “数据库用户属性”对话框。 ②在“数据库用户属性”对话框中,单击“权限”按钮,打开权限设置对话框。在此对 话框中,可以设置用户对数据库对象所具有的权限。在“对象”列中,显示了数据库中所有 的对象,而“所有者”列则显示了相应对象的所有者。其后的 6 列则是对数据库对象的操作, 具体含义如下: SELECT:对表或者视图的查询 INSERT:在表或者视图中插入记录 UPDATE:对表或者视图中的数据修改 DELETE:删除表或者视图中的数据 EXEC:执行存储过程 DRI:DeclarativeReferentialIntegrity,可对表的外键加上限制,以达成表的参照完 整性。对某个数据库对象而言,如果选中对应的复选框,则表示具有对该对象进行相应操作 的权限。每个复选框具有 3 种状态。空白时表示未指定权限,或权限还原到未设置状态;当 打“√”时表示具有该权限;当打“Δ时,表示不具有该权限

③如果要设置对表或者祝图的某一列透行操作的权限,可在列表中选择表或者视图对 象,然后单击“列”按钮。可打开“列权限”对话框。使用对话框即可进行相应权限的设置。 12.2.2管理安全账户 1查看服务器的登录账号 ()使用企业管理墨查看登录账号 进入全业管理器,展开“SQLServer组”,找到所要连接的SQLServer服务器,展开该 服务器对应的文作夹,再展开“安全性”文作夹。单击“登录”遗项,即可看到系统创建的 默认登录账号及己建立的其他登录账号。 (的使用存储过程查看登录账号 使用s邓_helplogins可查看登录据号, 语法格式:EXECsp_helplogins 2修政登录账户属性 ()使用企业管理器修政登录螺户属性 在创建登录之后。有时需要更改密码,默认数据库成默认语言。例如,用户可能忘了自 己的密马,或者出于安全考感而想更改密码,或者需要定期使用另一个数据库,或者需要查 看以另一种语言显示的消息。一校可执行下列操作: ①展开服务器组,然后展开服务器。 ②展开“安全性”项,然后单击“登录” 网在“评细信息”前格中,右健单击要修改的登录,从弹出菜单中选择“属性”选项。 ④单击“常规”标签页,在“密码”文本框中输入新的密码:或者在“数据库”列表中, 单击登录到SQLServer实例之后登录所连接的新的默认数据库:或者在“语言”列表中,单 击给用户显示清息时要使用的欧认语言。 回单击“服务器角色”标鉴页或“数据岸访问”标签页,即可完成其中各项的修改。这 里如同创建登录账号时基本相同,在此不再重复。最后,单击“确认”按钮,完成登录账户 的修政。 (的使用存储过程修改登录账户属性 ①用s甲password改变登录账号的密码 语法格式 sp_password[eold=]”old_password”,][entw-]”new_password”【,[eloginane-可]' login']
③如果要设置对表或者视图的某一列进行操作的权限,可在列表中选择表或者视图对 象,然后单击“列”按钮,可打开“列权限”对话框。使用对话框即可进行相应权限的设置。 12.2.2 管理安全账户 1.查看服务器的登录账号 ⑴使用企业管理器查看登录账号 进入企业管理器,展开“SQLServer 组”,找到所要连接的 SQLServer 服务器,展开该 服务器对应的文件夹,再展开“安全性”文件夹,单击“登录”选项,即可看到系统创建的 默认登录账号及已建立的其他登录账号。 ⑵使用存储过程查看登录账号 使用 sp_helplogins 可查看登录账号。 语法格式:EXECsp_helplogins 2.修改登录账户属性 ⑴使用企业管理器修改登录账户属性 在创建登录之后,有时需要更改密码、默认数据库或默认语言。例如,用户可能忘了自 己的密码,或者出于安全考虑而想更改密码,或者需要定期使用另一个数据库,或者需要查 看以另一种语言显示的消息。一般可执行下列操作: ①展开服务器组,然后展开服务器。 ②展开“安全性”项,然后单击“登录”。 ③在“详细信息”窗格中,右键单击要修改的登录,从弹出菜单中选择“属性”选项。 ④单击“常规”标签页,在“密码”文本框中输入新的密码;或者在“数据库”列表中, 单击登录到 SQLServer 实例之后登录所连接的新的默认数据库;或者在“语言”列表中,单 击给用户显示消息时要使用的默认语言。 ⑤单击“服务器角色”标签页或“数据库访问”标签页,即可完成其中各项的修改。这 里如同创建登录账号时基本相同,在此不再重复。最后,单击“确认”按钮,完成登录账户 的修改。 ⑵使用存储过程修改登录账户属性 ①用 sp_password 改变登录账号的密码 语法格式: sp_password[[@old=]’old_password’,][@new=]’new_password’[,[@loginame=]’ login’]

其中,[old”old4 ssword”为旧密码,【ne=]”ne4 ssword”为新密码, 【1ogna=习”1ogm’为登录据号名称, 【例126】将stud_login账号的密码由原来的computer改为aac0阳ter: EXECsp_4 ssword'co阳ter”,’aacomputer','stnl_login ②用理addsrvrolemeaber将登录账号加入服务器角色中 语法格式:sp_addsrvrolenember [eloginame=]'login'[erolename-]'ole' 其中,【elogina-】'login'是添加到服务器角色的登录名称:[olenane-]'role 为服务器角色的名称 (sysadnin,securityadmin,serveradmin,setupadmin,processadmin,diskadmin,dbcreator bulkadmin). 【例I2.7】将登录账号stud_login加入到dbcreator服务卷角色中, EXECsp_addsrvrolemember'stud_login',dbcreator' (3政变登录账户和用户之间的美系 要更改当前数据库中SQLServer用户与SQLServer登录之间的关系,可使用存储过程 sp_change_.ser8_login,其语法格式如下i sp_change_users_login[eAction=]'action' [,【eUserNamePattern='user”j[.[eloginName=”login”】 其中,[Action可]'action'说明过程要执行的操作,例如pdate0ne是将当前数据 库中雷定的用户益接到登录账户。登录账户必须已经存在,又不能为s,而用户不能为h0、 uest用户。使用这个过程可将当前数据岸中用户的安全账户链接到不月的登录。如果用户 登录已更改,则使用sp_change_users_login将用户峙接到新的登录,而不会丢失用户的权 限。 【例128】将student数据库中的用户stud_user与现有叠录之间的链接,变更为健 接到新的登录tec_1ogin账户上,可执行下列代码: USEstudent 00 ECsp_addlogin'teach1o城in'/添加新的登录账户/ 0/◆将现有链接变更为teach1ogin/ EXECsp_change_users_login'Update_One',stud_user',teach_login' 3查看数据库的用户
其中,[@old=]’old_password’为旧密码,[@new=]’new_password’为新密码, [@loginame=]’login’为登录账号名称。 【例 12.6】将 stud_login 账号的密码由原来的 computer 改为 aacomputer。 EXECsp_password’computer’,’aacomputer’,’stud_login’ ②用 sp_addsrvrolemember 将登录账号加入服务器角色中 语法格式:sp_addsrvrolemember[@loginame=]’login’[@rolename=]’role’ 其中,[@loginame=]’login’是添加到服务器角色的登录名称;[@rolename=]’role’ 为服务器角色的名称 (sysadmin,securityadmin,serveradmin,setupadmin,processadmin,diskadmin,dbcreator ,bulkadmin)。 【例 12.7】将登录账号 stud_login 加入到 dbcreator 服务器角色中。 EXECsp_addsrvrolemember’stud_login’,’dbcreator’ ⑶改变登录账户和用户之间的关系 要更改当前数据库中 SQLServer 用户与 SQLServer 登录之间的关系,可使用存储过程 sp_change_users_login,其语法格式如下: sp_change_users_login[@Action=]’action’ [,[@UserNamePattern=]’user’][,[@loginName=]’login’] 其中,[@Action=]’action’说明过程要执行的操作,例如 Update_One 是将当前数据 库中指定的用户链接到登录账户。登录账户必须已经存在,又不能为 sa,而用户不能为 dbo、 guest 用户。使用这个过程可将当前数据库中用户的安全账户链接到不同的登录。如果用户 登录已更改,则使用 sp_change_users_login 将用户链接到新的登录,而不会丢失用户的权 限。 【例 12.8】将 student 数据库中的用户 stud_user 与现有登录之间的链接,变更为链 接到新的登录 teac_login 账户上,可执行下列代码: USEstudent GO EXECsp_addlogin’teach_login’/*添加新的登录账户*/ GO/*将现有链接变更为 teach_login*/ EXECsp_change_users_login’Update_One’,’stud_user’,’teach_login’ 3.查看数据库的用户