在SQLServer中,为什么';t授予对象权限是否将用户正确添加到数据库?

在SQLServer中,为什么';t授予对象权限是否将用户正确添加到数据库?,sql,sql-server,sql-server-2005,permissions,Sql,Sql Server,Sql Server 2005,Permissions,这是我的设置: SQL server 2005 UserA已在服务器上设置为用户,但不在数据库上 将[GetOrders]上的执行授予[UserA]作为[dbo] 如你所见,我漏了一步。我还没有将UserA添加到数据库中。这不会失败,并允许我在对象上授予execute 我相信在2000年,它会抛出一个错误,不允许我这样做 现在,我设置了所有这些具有正确权限的对象,但用户无法查看数据库。要解决这个问题,我必须从数据库中删除用户,正确地重新添加他们,然后授予权限 为什么允许这样做?有没有一种方法

这是我的设置:

  • SQL server 2005
  • UserA已在服务器上设置为用户,但不在数据库上
  • 将[GetOrders]上的执行授予[UserA]作为[dbo]
如你所见,我漏了一步。我还没有将UserA添加到数据库中。这不会失败,并允许我在对象上授予execute

我相信在2000年,它会抛出一个错误,不允许我这样做

现在,我设置了所有这些具有正确权限的对象,但用户无法查看数据库。要解决这个问题,我必须从数据库中删除用户,正确地重新添加他们,然后授予权限

为什么允许这样做?有没有一种方法可以防止这样做,或者让它在新用户获得对象权限时自动创建db登录


谢谢。

当数据库未连接到生产服务器时,DBA可以灵活地修改用户和权限。我认为您不必重新添加用户。看看这家伙的剧本:

这是让你失望的部分

将[UserA]作为[dbo]


去掉“as dbo”部分。它将权限授予dbo用户。如果没有“AS[dbo]”部分,它将抛出一个错误。

我尝试了sp\u change\u users\u登录,但它什么也不做:通过更新用户修复的孤立用户数为0。通过添加新登录名然后更新用户修复的孤立用户数为0。在设置为2005兼容性的数据库中的2005服务器上尝试执行此操作时,我收到一个错误。我更像是一个SQL开发人员而不是DBA,所以我可能遗漏了一些东西。