SQL 查询在 SSMS 中有效,但在 C# 中无效:SELECT 被拒绝
SQL Query works in SSMS but not in C#: SELECT denied
首先:这不是一个特定的语句不起作用。 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', schema '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;
可信连接和集成安全意味着您总是连接到服务器作为帐户运行ning您的程序进程。您不必指定密码;相反,该程序将传递为用户 运行 宁进程颁发的身份验证令牌,并且数据库将根据该令牌进行验证。
如果您需要使用域登录,您必须运行您的程序作为该用户。如果您需要使用 username/password,您 必须 使用 Sql 身份验证和 Sql 服务器中定义的非域帐户。
首先:这不是一个特定的语句不起作用。 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', schema '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;
可信连接和集成安全意味着您总是连接到服务器作为帐户运行ning您的程序进程。您不必指定密码;相反,该程序将传递为用户 运行 宁进程颁发的身份验证令牌,并且数据库将根据该令牌进行验证。
如果您需要使用域登录,您必须运行您的程序作为该用户。如果您需要使用 username/password,您 必须 使用 Sql 身份验证和 Sql 服务器中定义的非域帐户。