【发布时间】:2013-02-26 12:52:16
【问题描述】:
我正在尝试从 Active Directory 组在 SQL 服务器上创建用户,因为我正在使用的应用程序本身不支持 Windows 身份验证,并且依赖于在 SQL 服务器上创建的个人登录,因为应用程序级别权限在应用程序而不是使用 SQL 角色。因此,要访问应用程序的每个用户都需要针对应用程序数据库所在的 SQL 实例创建自己的用户,以便随后可以在应用程序中为用户分配单独的权限。
我正在使用以下命令从我们指定的 Active Directory 组中读取用户列表;
exec master..xp_logininfo 'domain\groupname', 'members'
这将返回类似于以下内容的输出;
account name type privilege mapped login name permission path
DOMAIN\USER user user DOMAIN\USER DOMAIN\GROUPNAME
在大多数情况下,此列表中返回的用户可以在 SQL 实例上创建,不会有任何戏剧性。我首先使用sp_grantlogin 将用户创建为SQL 帐户,然后继续允许每个新登录访问应用程序数据库。但是,有少数用户被报告为不存在。由于运行sp_grantlogin,我收到以下错误;
Msg 15401, Level 11, State 1, Procedure sp_grantlogin, Line 49
Windows NT user or group 'DOMAIN\USER' not found. Check the name again.
显然在上面的错误信息中,我已经删除了实际的用户名。为什么xp_logininfo 会返回一个不能用sp_grantlogin 创建的用户?我有什么明显的遗漏吗?
【问题讨论】:
-
用户肯定存在于 AD 中,suser_sid 重复的可能性未知,因为 select suser_sid('DOMAIN\USER') 返回 NULL,域控制器可用(我假设) '能够针对它运行 xp_logininfo,并且我使用的情况与我尝试创建用户时从 xp_logininfo 返回的情况相同...
标签: sql-server active-directory