在SSMS中删除用户后,我应该检查什么?

时间:2014-07-03 15:21:30

标签: sql-server sql-server-2008

我做了一些愚蠢的事情,我想我修好了,我想知道是否有任何明显的我错过或应该检查。我是第一次接受SSMS 2008 R2中某些操作的正式培训的DBA。我对SQL有一个中等到很好的理解,并且知识正在快速增长。我仍然犯了一些错误。

今天我创建了一个用户,在自动驾驶仪上,在给她密码后不小心点击了Enter。我原本打算取消选中Enforce Password Expiration,用户必须在下次登录时更改密码。用户被映射到三个数据库。

我做的愚蠢的事情是决定删除服务器中的登录,从三个数据库中删除登录,然后重新创建登录。显然这不应该是我的解决方案。显然,尝试重新创建登录时返回了一个错误:"服务器主体FOO已经存在..."这是错误15025。

所以我发现确实,在FOO行的sys.server_principles中有一行。我使用Drop User来摆脱它,然后再次检查它已经消失了。太棒了,重新创建登录。新错误:"用户,组或角色已存在于当前数据库中..."错误号15023.这也为FOO添加了一个新行回到sys.server_principal,我再次删除了。

然后我重新创建了没有任何映射的登录,这是有效的。然后我尝试添加映射但得到了相同的错误15023,这并没有让我感到惊讶。我使用Alter User FOO登录= FOO。跑成功了。尝试再次添加映射,同样的错误。我尝试一次添加一个映射,发现我可以映射的三个数据库中的两个很好,但第三个是一个问题。

最后,我关闭了SSMS并重新打开它,由于某种原因,我现在能够映射第三个数据库。关闭和重新打开SSMS很可能什么也没做,我不明白为什么会这样,但我不知道是什么导致映射先前失败并且最后一次工作。

我已经测试了登录,它适用于所有数据库。我想知道是否应该进行任何清理工作或进行任何清理工作,或者我应该关注的任何问题。我确实有每日完整和每小时的事务备份,但由于数据库现在正在使用,我显然希望不必使用它们。

所以显然我搞砸了,我再也不会这样做了。任何可以检查,关注或保证的地方都将受到赞赏。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用以下查询检查映射是否正确:

select name, suser_sname(sid) as [login]
from sys.database_principals
where name = 'foobar'

suser_sname(sid)函数将采用安全标识符(sid)并将其映射回服务器级登录。在您关注的每个数据库中运行它,并确保登录确实符合您的预期。如果不是,你已经知道如何修复它(`alter user ... with login = ...)是正确的移动那里)。

顺便说一下,你的部分故事并不适合我。您说您正在检查sys.database_principals以查看是否存在登录。问题是登录在sys.server_principals中(而每个单独数据库的用户都在sys.database_principals中)。这可能会解决您遇到的麻烦。