gpt4 book ai didi

c# - 具有 db_datawriter 角色的用户无法选择表单数据库

转载 作者:太空宇宙 更新时间:2023-11-03 19:19:37 25 4
gpt4 key购买 nike

我像这样在我的程序中创建新的登录名和用户(使用 sql 存储过程)

//new login
SqlCommand cmd = new SqlCommand("sp_addlogin", conn);
cmd.CommandType = CommandType.StoredProcedure;
string login = radTextBox2.Text;
string password = radTextBox3.Text;
cmd.Parameters.Add(new SqlParameter("@loginame", login));
cmd.Parameters.Add(new SqlParameter("@passwd", password));
int i = cmd.ExecuteNonQuery();
....
//new user
SqlCommand cmd = new SqlCommand("sp_adduser", conn);
cmd.CommandType = CommandType.StoredProcedure;
string username = radTextBox1.Text;
string role;
try
{
switch (radDropDownList1.SelectedItem.Text)
{
case "Admin": { role = "db_owner"; break; }
case "Guest": { role = "db_datareader"; break; }
case "User": { role = "db_datawriter"; break; }
default: { this.radLabelElement1.Text = "Role was not chosen!"; return; }
}
}
catch (NullReferenceException) { this.radLabelElement1.Text = "Role was not chosen!"; return; };
string login = radTextBox2.Text;
cmd.Parameters.Add(new SqlParameter("@loginame", login));
cmd.Parameters.Add(new SqlParameter("@name_in_db", username));
cmd.Parameters.Add(new SqlParameter("@grpname", role));
int result = cmd.ExecuteNonQuery();

因为我希望数据库的每个用户都拥有数据库中 admin 的所有权限, 只有 guests 的读取权限以及 user 的读/写/更新/删除权限默认为数据库中的所有表。

我想如果db_owner允许在数据库中执行所有操作,然后 db_datawriter 允许读取/写入/更新/删除数据库中的数据,而 db_datareader 只能从数据库中读取数据。但是,当我为具有 db_datawriter 角色的用户使用登录名和密码时,我遇到了一个异常(当我尝试查看数据网格时)——“对对象‘Tablename’、数据库‘Databasename’、模式‘dbo’的 SELECT 权限被拒绝。 ..另一方面,用户使用db_datareader角色可以看到它但不能编辑(所以它工作正常)。

有什么问题?

最佳答案

如果您需要读取和写入功能,那么它们将同时需要 db_datawriter 和 db_datareader 角色。 db_datawriter 仅授予写入能力,因为在某些用例中您希望用户能够写入数据库但不能从中读取。

关于c# - 具有 db_datawriter 角色的用户无法选择表单数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13389615/

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