2012-11-15 1 views
1

Je crée de nouvelles connexions et utilisateurs dans mon programme comme celui-ci (en utilisant des procédures stockées SQL)utilisateur db_datawriter rôle ne peut pas sélectionner la base de données de formulaire

//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(); 

parce que je veux que chaque utilisateur de base de données pour avoir soit toutes les autorisations en base de données pour admin, seules les autorisations de lecture pour guests et lire/écriture/mise à jour/suppression autorisation pour user pour toutes les tables dans la base de données par défaut.

Je pensais que si db_owner permettait de tout faire dans la base de données, alors db_datawriter pouvait lire/écrire/mettre à jour/supprimer des données dans la base de données et db_datareader ne pouvait lire que les données de la base de données. Mais quand j'utilise le login et le mot de passe pour l'utilisateur avec le rôle db_datawriter j'ai une exception (quand j'essaie de voir dataagrid) - 'l'autorisation SELECT a été refusée sur l'objet' Tablename ', base de données' Databasename ', schéma' dbo '. ..Un autre utilisateur de la main avec le rôle db_datareader peut voir mais ne peut pas modifier (donc cela fonctionne correctement).

Quel est le problème?

Répondre

6

Si vous voulez à la fois lire et écrire, vous aurez besoin des rôles db_datawriter et db_datareader. db_datawriter attribue uniquement des capacités d'écriture, car il existe des cas d'utilisation dans lesquels vous souhaitez qu'un utilisateur puisse écrire dans la base de données mais ne pas en lire.

+0

mais comment ajouter ces deux rôles à l'utilisateur dans la procédure sp_adduser? – lapots

+0

Vous pouvez créer un autre rôle disposant à la fois de capacités de lecture et d'écriture. Vous pouvez également appeler sp_addrolemember pour ajouter un utilisateur à un rôle afin d'ajouter un autre rôle pour cet utilisateur. –

Questions connexes