2012-04-20 9 views
0

以下を考慮してください。 sqlcmd.exeを介して実行するとスキーマの作成後にSQL Serverがアクセス許可を適用しない

USE [$(db_name)] 
GO 

IF SCHEMA_ID('$(schema_name)') IS NULL 
    -- Must use dynamic SQL because 'CREATE SCHEMA' must be the first 
    -- statement in a query batch. 
    EXECUTE('CREATE SCHEMA [$(schema_name)]') 

-- User already exists at this point. 
GRANT SELECT, EXECUTE ON SCHEMA::[$(schema_name)] TO [$(user_name)] 

、エラーは報告されず、スキーマが作成されますが、許可が付与されていません。その後、SSMSの最後の行(sqlcmdの代わりに)を実行すると、期待どおりに動作します。

SQL Serverが私の質問をしない理由はありますか?

編集:は、SQL Server 2008(10.50.1617)と言っているはずです。

編集2: Oh lordは、デプロイメントフレームワークがユーザーを削除して再作成していることを確認しました。あなたの提案をありがとう。

+0

'GRANT'文を動的SQLとして実行しようとしましたか?ただのアイデア... – Bridge

+0

私は同じEXECUTEで実行しようとしましたが、サーバーはそれを好きではありませんでした。別のEXECUTEとして実行しようとはしていません。 –

+0

即時の疑わしいスコープ、Execute内の何かがそれ自身のスコープで実行されている、私はそこにも助成金を入れます。それが動作するかどうか、なぜ動作しないのか、なぜ動作しないのかは分かりません。 –

答えて

0

問題のデータベースユーザーが削除され、後で展開プロセスで再作成されていました。それでsqlcmd.exeからエラーが発生しなかった理由と、GRANTが不平を言う前に存在チェックを追加した理由、そしてその後手動でGRANTを実行したことが期待どおりに機能した理由を説明します。

関連する問題