我有两个 SQL Server 登录名,它们对应于两个窗口组:
MachineName\MyAppAmdin
MachineName\MyAppUser
我用
select principal_id, name, [type], usage
from sys.login_token
where principal_id > 0
检查当前用户是否是这些 Windows 组中的任何一个的成员。
当机器在域下时,它将列出
+--------------+---------------------------------+---------------+---------------+
| principal_id | name | type | usage |
+--------------+---------------------------------+---------------+---------------+
| 2 | public | SERVER ROLE | GRANT OR DENY |
| 3 | sysadmin | SERVER ROLE | GRANT OR DENY |
| 260 | MachineName\SQL Server Services | WINDOWS GROUP | GRANT OR DENY |
| 309 | MachineName\MyAppUser | WINDOWS GROUP | GRANT OR DENY |
| 325 | MachineName\MyAppAmdin | WINDOWS GROUP | GRANT OR DENY |
+--------------+---------------------------------+---------------+---------------+
正如预期的那样。
但是,当我尝试另一台工作组下的机器时,它只列出
+--------------+---------------------------------+---------------+---------------+
| principal_id | name | type | usage |
+--------------+---------------------------------+---------------+---------------+
| 2 | public | SERVER ROLE | GRANT OR DENY |
| 3 | sysadmin | SERVER ROLE | GRANT OR DENY |
| 260 | MachineName\SQL Server Services | WINDOWS GROUP | GRANT OR DENY |
+--------------+---------------------------------+---------------+---------------+
甚至该帐户实际上也是MyAppUser
or的成员MyAppAdmin
。
好吧,也许还有其他我没有注意到的因素,但到目前为止,工作组与域是我所知道的唯一区别。
它应该以这种方式工作还是我出错了?
在我删除 SQL Server 中的登录名和关联用户然后再次将它们添加回来后,问题就解决了。不知道出了什么问题,但可能会遇到同样问题的人的记录。