SQL - 另一个“对象上的SELECT权限被拒绝”问题

时间:2014-06-25 21:28:11

标签: sql sql-server database permissions

(我知道SO有十几个问题,有相同/相似的标题,我保证我已经完成了每一个都无济于事。我可能错过了一两个小细节,但我怀疑我的问题可能是更根深蒂固的东西。足以说明介绍)

无论如何,我有一个从备份数据库恢复的数据库(让我们称之为FooDB)。我可以使用SQL Server 2012 Management Studio执行任何操作,包括任何记录,列或表的SELECTINSERTDELETE

我遇到的问题是,当我尝试对同一个数据库运行简单查询时,出现以下错误:

  

发生了错误。“,”ExceptionMessage“:”对象'BarTable',数据库'FooDB',架构'dbo'上的SELECT权限被拒绝。“

堆栈跟踪还有很多,但除非必要,否则我不会在此处发布。我正在使用Visual Studio 2012 Ultimate,并在其中一个类文件中指定了连接字符串,如下所示:

using (SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;" +
                                             "Initial Catalog=FooDB;" +
                                             "Integrated Security=true;"))
{
    con.Open();
    using (SqlCommand command = new SqlCommand("SELECT TOP 3 * FROM BarTable", con))
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                ...  // code in this block is not shown as it is irrelevant to the issue
            }
        }
 }

听到我在SO上遇到的各种建议,我尝试了以下内容:

  • 在SQL Server Management Studio中,我选择了“安全” - > '登录' - >右键单击Windows登录名,然后打开“属性”对话框 - >在“服务器角色”页面中,我选择了dbcreatorpublicserveradminsetupadminsysadmin

  • 在上面的“属性”对话框中,我选择了“用户映射”页面,然后选中了数据库(FooDB)的“映射”复选框,并分配了以下数据库角色成员资格:{{1 }},db_accessadmindb_backupoperatordb_datareaderdb_datawriterdb_ddladmindb_ownerdb_securityadmin

    < / LI>
  • 从Server Management Studio的对象资源管理器中,我选择了“数据库” - &gt; 'FooDB' - &gt; '安全' - &gt; '用户' - &gt;然后我右键单击Windows登录名并选择“属性”以打开“数据库用户”对话框。然后,我选择了“拥有架构”页面并选中publicdb_backupoperatordb_datareader

  • 在上面的同一个对话框中,我选择了“会员资格”页面,然后选中了db_datawriterdb_accessadmindb_backupoperatordb_datareader,{{1 }},db_datawriterdb_ddladmin

这就是我现在所能想到的。同样,在SQL Server Management Studio中(使用相同的Windows身份验证和服务器名称登录后),我可以对数据库执行任何操作。但是从我的C#类中,似乎我可以连接到数据库,但我没有权限执行任何操作。

这是近一周来我一直在努力的失败。是什么赋予了?

2 个答案:

答案 0 :(得分:0)

服务器身份验证是否设置为SQL Server和Windows身份验证模式? 为此,右键单击SQLServer - &gt;属性 - &gt;安全

编辑:Dint意味着数据库,确实意味着SqlServer

答案 1 :(得分:0)

您是否尝试过运行sp_change_users_login。

有时,当您还原数据库时,它会为用户创建新的sid(安全ID)。当它这样做时,数据库用户和服务器登录看起来相同,但内部的sids不匹配。 sp_change_users_login将解决这个问题。

有关如何使用存储过程的详细信息,请访问:

https://msdn.microsoft.com/en-us/library/ms174378.aspx

最初尝试此操作 - 您必须稍微编辑它以适合您的用户和登录名:

EXEC sp_change_users_login'update_one','YourDBUserName','YourServerLoginName';