适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
分析平台系统(PDW)
Microsoft Fabric中的SQL数据库
本文章将介绍如何创建最常见类型的数据库用户。 有 13 种类型的用户。 本文 CREATE USER中提供了完整列表。 所有类型的 SQL Server 都支持数据库用户,但不一定支持所有类型的用户。
可以使用 SQL Server Management Studio 或 Transact-SQL 创建数据库用户。
了解用户类型
Management Studio 提供了创建数据库用户时的 6 个选项。 下图在绿框中显示这 6 个选项,并展示选项所代表的含义。
选择用户类型
如果对 SQL Server 不熟悉,可能很难决定要创建哪种类型的用户。 首先问问自己,需要访问数据库的用户或组是否有登录名?
创建一个带登录名的用户
管理 SQL Server 的用户和需要访问 SQL Server 实例上的多个或者全部数据库的用户通常拥有 master 数据库中的登录名。 在这种情况下,创建一个“带登录名的 SQL 用户”。 数据库用户是登录名连接到数据库时所对应的身份。 数据库用户可以使用与登录名相同的名称,但这不是必需的。 本文章假设 SQL Server 中已存在登录名。 有关如何创建登录名的信息,请参阅 “创建登录名”。
创建不含登录名的用户
如果需要访问数据库的用户和组没有登录名,并且他们只需要访问一个或少数几个数据库,则创建 Windows 用户或者带密码的 SQL 用户。 也称为包含的数据库用户。 包含的数据库用户未与 master 数据库中的登录名关联。 当你想在 SQL Server 的实例间轻松地移动数据库时,这是一个理想的选择。 若要在 SQL Server 上使用此选项,管理员必须先为 SQL Server 启用包含数据库,并为该数据库启用包含。 有关详细信息,请参阅使用包含的数据库实现数据库可移植。
Important
作为包含的数据库用户进行连接时,必须在连接字符串中提供数据库的名称。 若要在 SQL Server Management Studio (SSMS) 中指定数据库,在“连接到”对话框中选择“选项”,然后选择“连接属性”选项卡。
当连接者无法通过 Windows 身份验证进行身份验证时,请选择带密码的 SQL 用户,或选择基于SQL Server 身份验证登录名的带登录名的 SQL 用户。 组织外的用户(例如客户)连接到你的 SQL Server 这种情况很常见。
Tip
对于组织内的用户,最好选择使用 Windows 身份验证。因为组织内的用户不需要记住其他密码,而且 Windows 身份验证可以提供其他安全功能,例如 Kerberos。
Background
用户是数据库级别安全主体。 登录名必须映射到数据库用户才能连接到数据库。 一个登录名可以作为不同用户映射到不同的数据库,但在每个数据库中只能作为一个用户进行映射。 在部分包含的数据库中,可以创建没有登录名的用户。 有关包含的数据库用户的详细信息,请参阅 CREATE USER。 如果数据库中的 guest 帐户已启用,则未映射到数据库用户的登录名可以作为 guest 帐户访问该数据库。
从 SQL Server 2012(11.x)开始,SQL Server 和 Azure SQL DB 使用了 SHA-512 哈希,并结合一个 32 位、随机且唯一的盐值。 此方法使攻击者无法推断密码。
SQL Server 2025 (17.x) 引入了迭代哈希算法,RFC2898也称为 基于密码的密钥派生函数 (PBKDF)。 此算法仍使用 SHA-512,但多次对密码进行哈希处理(100,000 次迭代),显著减缓了暴力攻击的速度。 此更改增强了密码保护,以应对不断变化的安全威胁,并帮助客户遵守 NIST SP 800-63b 指南。 此安全增强功能使用更强大的哈希算法,这可能会稍微增加 SQL 身份验证登录的登录时间。 在连接池的环境中,影响通常较低,但在没有池的情况下或在登录延迟受到密切监视的情况下,这种影响可能更明显。
Important
guest 用户通常处于禁用状态。 除非有必要,否则不要启用来宾用户。
作为安全主体,用户可以被授予权限。 用户的作用域是数据库。 若要连接 SQL Server 实例上的特定数据库,登录名必须映射到数据库用户。 数据库内的权限是向数据库用户而不是登录名授予和拒绝授予的。
Permissions
需要对数据库拥有 ALTER ANY USER 权限。
使用 SSMS 创建用户
在对象资源管理器中,展开 “数据库” 文件夹。
展开要在其中创建新数据库用户的数据库。
右键单击“安全性”文件夹,指向“新建”,然后选择“用户…”。
在“常规”页上的“数据库用户 - 新建”对话框中,从“用户类型”列表中选择以下一个用户类型:
- 带登录名的 SQL 用户
- 具有密码的 SQL 用户(启用包含的数据库时)
- 不带登录名的 SQL 用户
- 已映射到证书的用户
- 已映射到非对称密钥的用户
- Windows 用户
在 Fabric SQL 数据库中,不支持
WITH PASSWORD,因为唯一受支持的身份验证方法是适用于数据库用户的 Microsoft Entra ID。选择选项时,对话框中的其他选项可能改变。 某些选项仅适用于特定类型的数据库用户。 某些选项可以留空,并且使用默认值。
用户名
输入新用户的名称。 如果你从“用户类型”列表中选择了“Windows 用户”,则还可以选择省略号 (…) 打开“选择用户或组”对话框。
登录名
输入用户的登录名。 或者,选择省略号(...)以打开“选择登录”对话框。 如果您从“用户类型” 列表中选择了 “带登录名的 SQL 用户” 或 “Windows 用户” ,则 “登录名” 可用。
“密码” 和 “确认密码”
输入在数据库中进行身份验证的用户的密码。
默认语言
输入默认的用户语言。
默认架构
输入此用户所创建的对象所属的架构。 或者,选择省略号 (…) 以打开“选择架构”对话框。 如果您从“用户类型” 列表中选择了 “带登录名的 SQL 用户”, “不带登录名的 SQL 用户”或 “Windows 用户” ,则 “默认架构” 可用。
证书名称
输入供数据库用户使用的证书。 或者,选择省略号 (…) 以打开“选择证书”对话框。 如果从“用户类型” 列表中选择了 “映射到证书的用户” ,则 “证书名称” 可用。
非对称密钥名称
输入数据库用户要使用的密钥。 或者,选择省略号 (…) 以打开“选择非对称密钥”对话框。 如果从“用户类型” 列表中选择了 “映射到非对称密钥的用户” ,则 “非对称密钥名称” 可用。
选择“确定”。
其他选项
“数据库用户 - 新建”对话框还在四个其他页面上提供了选项:“拥有的架构”、“成员身份”、“安全对象”和“扩展属性”。
“拥有的架构” 页列出了可由新的数据库用户拥有的所有可能的架构。 若要向数据库用户添加架构或者从数据库用户中删除架构,请在 “此用户拥有的架构”下选中或取消选中架构旁边的复选框。
“成员身份” 页列出了可由新的数据库用户拥有的所有可能的数据库成员身份角色。 若要向数据库用户添加角色或者从数据库用户中删除角色,请在 “数据库角色成员身份”下选中或取消选中角色旁边的复选框。
Securables 页面列出所有可能的安全对象,以及可授予该登录名的这些安全对象上的权限。
“扩展属性”页允许您向数据库用户添加自定义属性。 此页还提供以下选项:
Database
显示所选 数据库的名称。 此字段是只读的。
Collation
显示用于所选数据库的排序规则。 此字段是只读的。
Properties
查看或指定对象的扩展属性。 每个扩展属性都由与该对象关联的元数据的名称/值对组成。
省略号 (...)
选择 值 后面的省略号 (...) 以打开 扩展属性值 对话框。 在这一较大的范围中键入或查看扩展属性的值。 有关详细信息,请参阅 “扩展属性的值”对话框。
Delete
删除所选扩展属性。
使用 T-SQL 创建用户
在 “对象资源管理器” 中,连接到数据库引擎实例。
在“标准”栏上,选择“新建查询”。
将以下示例复制并粘贴到查询窗口中,然后选择“执行”。
-- Creates the login AbolrousHazem with password '340$Uuxwp7Mcxo7Khy'. CREATE LOGIN AbolrousHazem WITH PASSWORD = '340$Uuxwp7Mcxo7Khy'; GO -- Creates a database user for the login created previously. CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem; GO
有关详细信息,请参阅 CREATE USER包含更多 Transact-SQL 示例。