【问题标题】:Cannot find the user '', because it does not exist or you do not have permission找不到用户'',因为它不存在或您没有权限
【发布时间】:2013-04-09 01:34:09
【问题描述】:

我正在尝试为使用此查询的用户添加存储过程的权限,

USE [MyDatabaseName]
GO

GRANT EXEC ON [dbo].[StoreProcedureName] TO [UserName]
GO

我可以通过用户界面向用户授予权限,但使用此查询时出现此错误,

找不到用户“UserName”,因为它不存在或您没有 权限。

如果我没有权限,那么如何使用用户界面添加权限。

【问题讨论】:

  • 您确定用户名存在吗?如果是 Windows 帐户,请在前面加上域名。
  • 我编的,是的,我的同名用户确实存在..
  • 错误信息是不言自明的——您是作为系统管理员还是 dbo 连接的?用户名不正确,或者您没有足够的权限。
  • 我在 SQL Server 管理工作室中运行查询,如果我没有权限,那么如何添加它抛出 UI ??
  • 查询select * from sys.database_principals where name = 'UserName'返回什么?您的服务器是否使用区分大小写的排序规则?

标签: sql-server tsql sql-server-2005 stored-procedures


【解决方案1】:

我也遇到了同样的问题。

确保主表中有您的登录名的用户映射。不需要数据库角色成员资格,只需在登录“用户名”的属性中的“用户映射”下为数据库主服务器勾选“映射”。

【讨论】:

    【解决方案2】:

    运行这个:

    USE [db_where_you_need_access]
    GO
    CREATE USER [your_user] FOR LOGIN [your_user]
    

    【讨论】:

      【解决方案3】:

      我遇到了这个问题,但我在服务器上的本地管理员组中。显然,如果打开 UAC,以管理员身份运行 SQL Server Management Studio 会大有不同。在我这样做之前我没有任何权限。

      【讨论】:

      • 感谢您的提示。为清楚起见:我的解决方案是右键单击桌面上的 SQL Server Management Studio 图标,然后从上下文菜单中选择“以管理员身份运行”。然后我可以毫无问题地发送到您的GRANT EXECUTE...
      【解决方案4】:

      当数据库已从另一台服务器恢复并且数据库中用户的 GUID 与当前服务器的 GUID 不同时,您可能会遇到此类问题。

      这将重新链接孤立的用户:

      USE <database_name>;
      GO
      sp_change_users_login @Action='update_one', @UserNamePattern='<database_user>', 
         @LoginName='<login_name>';
      GO
      

      除此之外,如果用户存在并且您拥有相关的安全权限,那么您所做的没有理由不起作用。

      【讨论】:

        【解决方案5】:

        有点愚蠢,但请确保UserNameGRANT 语句中拼写正确。我花了半个小时试图弄清楚这个错误的原因是什么,这只是我的一个错字!

        【讨论】:

          猜你喜欢
          • 2021-10-03
          • 2016-11-22
          • 2015-05-27
          • 2010-12-08
          • 2017-03-19
          • 2021-07-22
          • 1970-01-01
          • 2013-10-01
          • 1970-01-01
          相关资源
          最近更新 更多