【发布时间】:2014-08-16 14:52:57
【问题描述】:
(我知道 SO 有十多个标题相同/相似的问题,我保证我已经通过每一个问题都无济于事。我可能错过了一两个小细节,但我怀疑我的问题可能是根深蒂固的东西。足够的介绍)
>无论如何,我有一个从备份数据库恢复的数据库(我们称之为FooDB)。我可以使用 SQL Server 2012 Management Studio 做任何我想做的事情,包括在任何记录、列或表上的 SELECT、INSERT 或 DELETE。
我遇到的问题是,当我尝试对同一个数据库运行一个简单查询时,我收到以下错误:
发生错误。","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 登录名并打开“属性”对话框 -> 在“服务器角色”页面中,我选择了
dbcreator、public、serveradmin、setupadmin和sysadmin在上面的同一个“属性”对话框中,我选择了“用户映射”页面,然后选中了数据库 (FooDB) 的“映射”复选框,并分配了以下数据库角色成员资格:
db_accessadmin、db_backupoperator、db_datareader、db_datawriter、db_ddladmin、db_owner、db_securityadmin和public从 Server Management Studio 的对象资源管理器中,我选择了 'Databases' -> 'FooDB' -> 'Security' -> 'Users' -> 然后我右键单击 Windows 登录名并选择了 '属性”以打开“数据库用户”对话框。然后我选择了“Owned Schemas”页面并检查了
db_backupoperator、db_datareader和db_datawriter
1234563 @
这就是我此刻所能想到的。同样,在 SQL Server Management Studio 中(使用相同的 Windows 身份验证和服务器名称登录后),我可以对数据库做任何我想做的事情。但是在我的 C# 类中,我似乎可以连接到数据库,但我没有执行任何操作的权限。
这是我近一周来一直在努力解决的问题,但没有成功。是什么赋予了?
【问题讨论】:
标签: sql sql-server database permissions