登录名: 是帐户标识符,用来控制对任何 SQL Server 2000 系统的访问权限。SQL Server 2000 只有在首先验证了指定的登录 ID 有效后,才完成连接。 用户: 在数据库内,对象的全部权限和所有权由用户帐户控制。用户与数据库相关。用户只能查看经授权可以查看的表和视图,并且只能执行经授权可以执行的存储过程和管理功能。在安装SQL Server后,默认数据库中包含两个用户:dbo和guest。 “用户”只在本数据库内有效,举例来说:sales数据库中的xyz用户帐户不同于inventory数据库中的xyz用户帐户,即使这两个帐户有相同的ID。用户由固定数据库角色db_owner成员定义。 “用户”在定义时便与一个“登录名”相关联(why?!)。例如,db_owner角色成员可以使“登录名”Joe与sales数据库中的“用户”abc和employee数据库中的“用户”def相关联。默认情况下,“登录名”和“用户”相同。 下例说明给 Windows 2000 帐户授予对数据库的访问权限,并使该登录与数据库中的用户相关联: USE master GO sp_grantlogin 'NETDOMAIN/Sue' GO sp_defaultdb @loginame = 'NETDOMAIN/Sue', defdb = 'sales' GO USE sales GO sp_grantdbaccess 'NETDOMAIN/Sue', 'Sue' GO 在sp_grantlogin语句中,授予Windows2000用户NETDOMAIN/Sue(对库来说即“登录名”)访问Microsoft SQL Server2000的权限。sp_defaultdb语句使sales数据库成为该“登录名”的默认数据库。sp_grantdbaccess语句给NETDOMAIN/Sue“登录名”提供了访问sales数据库的权限,并将其在sales内的“用户”设置成Sue。
下例说明定义SQL Server“登录名”,指派默认数据库,并使该登录与数据库中的用户相关联: USE master GO sp_addlogin @loginame='TempWorker',@password = 'fff',defdb='sales' GO USE sales GO sp_grantdbaccess 'TempWorker' GO sp_addlogin语句定义了一个供各种临时工作人员使用的SQL Server“登录名”。该语句还将sales数据库指定为此登录的默认数据库。sp_grantdbaccess语句给TempWorker“登录名”授予了对sales数据库的访问权限,由于没有指定用户名,默认为TempWorker。 数据库中的用户由用户ID而非“登录名”标识。例如,在每个数据库中,sa是映射到特殊“用户”帐户dbo(数据库所有者)的登录帐户。所有与安全有关的Transact-SQL语句都将该“用户”作为security_name参数使用。如果sysadmin固定服务器角色成员和db_owner固定数据库角色成员对系统进行设置,使每个用户的“登录名”和“用户”都相同,就不容易混淆权限的管理和理解,但不必非这样做。 在SQL Server数据库中,guest帐户是特殊的用户帐户。如果用户使用USE database语句访问的数据库中没有与此用户关联的帐户,此用户就与guest用户相关联。