OK、SQL Server 2005の別のインスタンスでデータベースの「空の」バージョンを作成しようとしています。これを行うには、スクリプトウィザードを使用して、すべてのテーブル、ビュー、SP、いくつかのユーザを追加し、ユーザに許可を与えます。今、スクリプトの許可セクションで、私は(とりわけ)[master]のGRANTは他のDBに伝えますか?
use [master]
GO
GRANT CREATE VIEW to [myUser]
GO
...
use [prodDb]
GO
GRANT REFERENCES on [tblMyTable] to [myUser]
GO
...
を作成しました。これはウィザードによって生成されたスクリプトです。私が把握しようとしていることは、「マスターを使用して... GRANT CREATE VIEW」を実行すると、myUserはprodDbでビューを作成できますか?これは私の理解です - 私は "myUserはこのインスタンス上のどのデータベースでもビューを作成できます"と言っていますが、myUserがprodDbでビューを作成できるようにしようとするとパーミッションエラーが発生すると思います。 SQL Server ManagerでprodDbのアクセス許可を調べると、アクセス許可は正しいですが、生成されたスクリプトを実行しているターゲットシステムにはSQL Server Managerがなく、ユーザーごとのアクセス許可を確認する方法がわかりませんコマンドラインからの特定のオブジェクト(そして、私がこれらのアクセス権を行使しようとするときのエラーは大きなヒントです)。
これはスクリプトウィザードのバグですか?マスターレベルで権限を取り除き、DBレベルでのみ権限を付与する必要がありますか?何か違いがある場合は、決してネットワーク化されないスタンドアロンシステム上のローカルアプリ用です。
ETA:OK、なぜスクリプティングウィザードがprodDbの正しいGRANT文をスクリプト化していないのですか?つまり、prodDb上のmyUserの現在のアクセス許可を見ると、VIEWを作成できます。しかし、コマンドラインから新しいSQL Serverインスタンスでスクリプトを実行すると、myUserはprodDbでVIEWを作成できません。私はこれを手で修正することができますが、スクリプトウィザードを再実行するたびにそのことを覚えておかなければなりません。
ログインはサーバ全体であるこれらの変更による影響を受けません - モデルへの変更は、彼らが作成しているときに、新しいデータベースにを伝播します –