2010-02-05 6 views
1

Lorsque je tente de le faire, je reçois le message d'erreur suivant:rôle Assigner des db_denydatawriter à l'utilisateur dbo

Add member failed for DatabaseRole 'db_denydatawriter'. (Microsoft.SqlServer.Smo)
ADDITIONAL INFORMATION:
An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
Cannot use the reserved user or role name 'dbo'. (Microsoft SQL Server, Error: 15405)

J'ai une base de données qui doit rester « gelé ». Je souhaite conserver la propriété de la base de données, mais m'empêche (en tant que dbo) de modifier accidentellement les données. Y a-t-il un autre moyen d'accomplir cela?


EDIT: J'ai décidé d'ouvrir une new question pour répondre aux lignes ci-dessous:
Les données contenues dans la base de données doit rester congelés. Cependant, la structure pourrait changer.

La base de données est en fait plusieurs bases de données. Ce sont essentiellement des instantanés de la base de données de production prises deux fois par an. Les utilisateurs peuvent ensuite afficher les données historiques en basculant la base de données principale à partir de l'interface graphique frontale. Cependant, de nouveaux champs sont parfois ajoutés aux tables de la base de données en cours. Cela peut causer des problèmes si le serveur frontal s'attend à ce que ces champs soient présents. Notre solution actuelle consiste à ajouter les champs à la volée (les utilisateurs ont des rôles db_datareader, db_denydatawriter et db_ddladmin). Cela signifie que la base de données ne peut pas être créée en lecture seule, car cela empêcherait toute modification de la structure de la table.

+0

Lorsque les modifications de la structure actuelle de db, est-il un changement contrôlé par le dba ou un développeur? Si c'est le cas, désactivez simplement les indicateurs en lecture seule, apportez vos modifications aux dbs du snapshot et réactivez les indicateurs. – Ray

+0

Je pourrais le faire, mais l'instantané est assez grand pour que le drapeau prenne presque une minute entière. L'ajout du champ à une table dans le DB non lu prend au plus quelques secondes. Du point de vue de la performance, éteindre et allumer le drapeau n'est pas réalisable. – mwolfe02

+0

À quelle fréquence cela arrive-t-il? Deux minutes de temps d'arrêt sur un instantané sont-elles un gros problème? – Ray

Répondre

3

ensemble la db à lecture seule:

ALTER DATABASE [nom_bdd] SET READ_ONLY

Questions connexes