SQL Server:理解用户名与登录名的关系

需积分: 50 9 下载量 58 浏览量 更新于2024-09-18 1 收藏 5KB TXT 举报
在SQL Server中,数据库管理系统(DBMS)设计了一个复杂的权限模型来管理用户访问。这个模型涉及到两个关键概念:登录名(Logins)和用户名(Users)。登录名是系统级别的身份验证,而用户名是在特定数据库中的授权实体。让我们深入探讨这两个概念以及它们之间的关系。 首先,登录名是SQL Server实例级别的身份验证机制,它允许用户连接到服务器。登录名可以基于SQL Server身份验证(使用用户名和密码)或Windows身份验证(利用Windows域账户)。你可以通过执行`SELECT * FROM sys.server_principals`来查看所有的登录名。登录名控制着服务器的总体访问权限,并且可以分配给一个或多个数据库。 `sp_addlogin`存储过程用于创建新的登录名,例如`exec sp_addlogin 'username', 'password'`。删除登录名则使用`sp_droplogin`,如`exec sp_droplogin 'username'`。值得注意的是,删除登录名会影响到与该登录名关联的所有数据库用户。 接下来,用户名是在特定数据库中的角色,它们是登录名在数据库中的表示。用户定义了数据库级别的权限,比如数据的读取、写入等。你可以通过查询`information_schema.users`来获取数据库中的所有用户。`sp_adduser`存储过程用来添加用户,如`exec sp_adduser 'username', 'domain\user', 'db_role'`,其中'db_role'可以是预定义的角色,如'db_owner',意味着该用户拥有对数据库的全部控制。 数据库权限可以通过分配角色或直接赋予权限来管理。例如,`db_owner`角色允许用户拥有对数据库的完全控制,包括创建表、视图、索引等。`db_datareader`和`db_datawriter`角色分别允许读取和写入数据。此外,还可以使用`GRANT`, `DENY`, 和 `REVOKE`语句来授予、拒绝或撤销特定的权限。 备份数据库的命令示例为:`BACKUP DATABASE jobcorps_com_cnto DISK = 'd:\123.bak'`,这将数据库jobcorps_com_cnto备份到指定的磁盘位置。 在默认情况下,每个SQL Server数据库都有一个名为`public`的公共角色,所有用户自动成为其成员。数据库中的所有对象(如表、视图、存储过程)都对`public`角色开放一定的权限。`guest`用户也是一个特殊的角色,如果没有明确的数据库用户,它可以提供默认访问权限。但`guest`用户默认是禁用的,除非有特定需求,一般不推荐启用。 当创建一个新数据库时,SQL Server会创建一个默认的dbo用户,它是该数据库的所有者,通常与创建数据库的登录名关联。`dbo`用户具有数据库内的全部权限。另外,`sa`(系统管理员)是一个特殊的登录名,属于`sysadmin`固定服务器角色,拥有对整个SQL Server实例的最高权限。 在处理多用户环境时,理解登录名和用户名的关系至关重要,因为这有助于确保数据的安全性和访问控制。每个登录名可以有多个用户名,分别在不同的数据库中,而每个用户名只能对应一个登录名。在不同数据库中使用相同的用户名并不意味着它们共享相同的权限,因为权限是基于数据库用户的,而不是登录名。 总结来说,SQL Server的登录名和用户名是其权限结构的关键组成部分。登录名控制服务器级别的访问,而用户名则在数据库层面上定义权限。理解这两者的区别和相互作用对于有效管理和保护数据库资源至关重要。