【问题标题】:user with role db_datawriter can't select form database具有角色 db_datawriter 的用户无法选择表单数据库
【发布时间】:2012-11-15 00:11:18
【问题描述】:

我像这样在我的程序中创建新的登录名和用户(使用 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 角色的用户使用登录名和密码时,我遇到了一个异常(当我尝试查看数据网格时)-'对对象'表名'、数据库'数据库名'、模式'dbo'的 SELECT 权限被拒绝。 ..另一方面,具有db_datareader 角色的用户可以看到它但无法编辑(因此它可以正常工作)。

有什么问题?

【问题讨论】:

    标签: c# sql-server


    【解决方案1】:

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

    【讨论】:

    • 但是如何在 sp_adduser 过程中将这两个角色添加到用户?
    • 您可以创建另一个具有读写能力的角色。或者,您可以调用 sp_addrolemember 将用户添加到角色,从而为该用户添加另一个角色。
    猜你喜欢
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2021-11-16
    相关资源
    最近更新 更多