之前有人问过这个问题,但我没有看到任何答案(https://stackoverflow.com/questions/6468813/assign-a-login-to-a-user-created-without-login-sql-server)
当用户最初是使用 GUI 中的“没有登录的 SQL 用户”用户类型选项创建的时,如何将登录映射到用户?我正在使用 SQL Server 2012
之前有人问过这个问题,但我没有看到任何答案(https://stackoverflow.com/questions/6468813/assign-a-login-to-a-user-created-without-login-sql-server)
当用户最初是使用 GUI 中的“没有登录的 SQL 用户”用户类型选项创建的时,如何将登录映射到用户?我正在使用 SQL Server 2012
通过在 SSMS 的创建用户对话框中选择没有登录的 SQL 用户,这是生成的 T-SQL(除了提供的用户名之外没有其他选项):
如果您要创建登录名并尝试使用新登录名更改用户,例如以下尝试:
您将收到以下错误:
因此,我认为您不能在不重新创建的情况下将登录名链接到此类用户。它应该相对轻松,因为您可以编写用户脚本,但将参数从更改为
WITHOUT LOGIN
您希望将其映射到的任何登录名。编辑:正如下面 Aaron 所指出的,确保您在进行任何更改之前注意权限和角色成员身份。如果这是所需的行为,您将希望确保您可以恢复到当前所处的权限状态。
出于某种原因,这些类型的用户无法使用Thomas Stringer 回答中所述的“更改用户”重新链接。
通过检查,当 sys.database_principals.authentication_type = 0 或 1(可能还有其他)时,SSMS 对话框显示“没有登录的 SQL 用户”。
注意到蛮力也不起作用:
这种需求可能来自这样一种环境,对于某些特定的数据库,通常只推送模式更改一个方向而将整个数据库拉到另一个方向:
数据库本身承载所有用户,因此差异(例如 Redgate)列表保持在 0 附近。对于像 RedGate 这样的差异工具,对象的权限往往与每个对象一起列出。此外,某些用户可能会被列为 SP 的“执行身份”。