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

时间:2012-11-15 00:11:18

标签: c# sql-server

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

有什么问题?

1 个答案:

答案 0 :(得分:6)

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