gpt4 book ai didi

c# - SQL 查询在 SSMS 中有效,但在 C# : SELECT denied 中无效

转载 作者:太空宇宙 更新时间:2023-11-03 18:52:49 30 4
gpt4 key购买 nike

首先:这不是一个不起作用的特定语句。 SELECT * FROM [TABLE]; 也不起作用。当我以用户 A 的身份在 SSMS 中运行它时,它运行得非常好。当我像这样在 C# 中使用它时:

string sqlCommand = "SELECT * FROM [TABLE];"

using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Name"].ToString()))
using (var command = new SqlCommand(sqlCommand, conn))
{
conn.Open();

using (var dataReader = command.ExecuteReader())
{
while (dataReader.Read())
{
// work with results
}
}
}

我使用 try-catch 记录此代码块,并收到此错误消息:System.Data.SqlClient.SqlException (0x80131904): The SELECT permission was denied on the object 'TABLE', database 'MyDb' , 架构 'dbo'。

即使我在数据库所在的服务器上运行程序,我也会得到同样的错误。

我的连接字符串看起来像这样:

Data Source=Server\Something;Initial Catalog=MyDb;User ID=DOMAIN\username;Password=verySecurePassword;Trusted_Connection=True;

用户 A 对整个数据库具有数据读取者角色。

你知道为什么会这样吗?我的数据库管理员也帮不了我,这似乎不是网络问题,因为连接似乎可以正常工作。

最佳答案

当你的连接字符串中有这个时:

Trusted_Connection=True;

这部分连接字符串被忽略:

User ID=DOMAIN\username;Password=verySecurePassword;

可信连接和集成安全意味着您始终以运行程序进程的帐户连接到服务器。您不必指定密码;相反,该程序将传递为运行该进程的用户颁发的身份验证 token ,并且数据库将根据该 token 进行验证。

如果您需要使用域登录,您必须以该用户身份运行您的程序。如果您需要使用用户名/密码,您必须使用 Sql Server 中定义的非域帐户进行 Sql 身份验证。

关于c# - SQL 查询在 SSMS 中有效,但在 C# : SELECT denied 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53394978/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com