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?
mais comment ajouter ces deux rôles à l'utilisateur dans la procédure sp_adduser? – lapots
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. –