オブジェクト 'Users'、データベース 'XXX'、スキーマ 'dbo'でSELECT権限が拒否されました


83

データベースをSQLServer2012からAzureに移動しました。ユーザーを使いたくないmasterので、ユーザーを作成しましたtest。これは、Azure上のデータベースXXXに対して行ったことです。

create user test from login test with default_schema=[dbo]
exec sp_addrolemember 'db_owner','test'

確認したところ、関心のあるデータベースオブジェクトはすべてスキーマにありますdbo。テーブルUsersはスキーマにありますdbo

私のWebプロジェクトの接続文字列testはログインとして持っています。エラーメッセージが表示されます。

The SELECT permission was denied on the object 'Users', database 'XXX', schema 'dbo'

エラーメッセージの意味と、ユーザーtestがデータベースXXXにアクセスできるようにするにはどうすればよいですか?


この質問をしてくれてありがとう:)
Kamlesh19年

回答:


76

問題は、拒否権限を持つユーザーにあると思います。このエラーは、作成したユーザーがデータベース内のテーブルにアクセスするための十分な権限を持っていない場合に発生します。必要なものを取得するために、ユーザーに特権を付与してください。

GRANTようなSELECT、INSERT、UPDATEなどのユーザ固有のアクセス許可を、そのデータベース内のテーブルにDELETE。


3
時々あなたはdbデータリーダー/ db所有者オプションが欠けているでしょう?windowstechinfo.com/2014/09/...
Aravinda

5
'db_denydatareader'と 'db_denydatawriter'のチェックを外さなければならなかったのですが、それがSaeXが「取り消す」という意味だと思います。SaeXに感謝します。
ああ。

@AH。私はあなたと同じ問題を抱えていたので、この質問に対する答えを書きました。チャンスがあればチェックしてください
コロブキャニオン2018

あなたは命の恩人、どうもありがとうございました:)です
Kamlesh

58
  1. SQL ManagementStudioを開きます
  2. データベースを拡張します
  3. 「セキュリティ」フォルダを展開します
  4. 「ユーザー」を展開
  5. ユーザー(クエリを実行しようとしているユーザー)を右クリックして、を選択しますProperties
  6. ページを選択しますMembership
  7. 必ずチェックを外してください

    db_denydatareader

    db_denydatawriter

ここに画像の説明を入力してください

これは言うまでもありませんが、ユーザーが必要とするものにのみアクセス許可を付与します。簡単な怠惰な修正は、db_owner私が持っているようにチェックすることですが、これは最良のセキュリティ慣行ではありません。


4
あなたは命の恩人、どうもありがとうございました:)です
Kamlesh

1
あなたは私に何時間もの時間を節約しました-グーグルと欲求不満を無駄にします!
スコットフレミング

2
私たちの多くは、すべてのアクセス許可を取得することを前提として、それらすべてを選択するだけです。しかし、それもありdenyます
MuraliMurugesan20年

30

特定のテーブルに対する選択権限を付与する構文:

USE YourDB;

GRANT SELECT ON dbo.functionName TO UserName;

データベース内のすべてのテーブルに選択権限を付与するには:

USE YourDB;

GRANT SELECT TO UserName;

2
初めてこれを行ったので、それが正しいかどうかはわかりませんが、データベース全体に選択権限を付与したかったので、GRANT SELECT TO UserNameを実行し、ON句を省略しました。機能した。
リッチ

18

これが私が直面したときに問題を解決することができた方法です

  1. SQL ManagementStudioを起動します。
  2. (「オブジェクトエクスプローラー」で)サーバーノードを展開します。
  3. [データベース]ノードを展開してから、特定のユーザーを使用してアクセスしようとしている特定のデータベースを展開します。
  4. データベースの[セキュリティ]ノードの下にある[ユーザー]ノードを展開します。
  5. 特定のユーザーを右クリックし、「プロパティ」をクリックします。ダイアログボックスが表示されます。
  6. ユーザーがdb_ownerグループのメンバーであることを確認し(このパスを使用する前に以下のコメントを読んでください)、ビューを使用してその他の必要な変更を行ってください。(私はこれを2016年に使用しました。特定のダイアログが他のバージョンでどのように表示されるかわからないため、特定されていません)

6
db_ownerデータベースロールに誰を配置するかに注意してください。すべてのユーザーをその役割に追加する必要はありません。
ロッド

1
@Rod db_ownerの付与が推奨されない場合、アプリケーションがデータベースと対話するために推奨されるアクセスタイプはどれですか。
ジェイコブ

1
公共で十分でしょうか?
ロッド

2
@Jacob任意のテーブルでデータを読み書きするには、iddb_datareaderとdb_datawriterがあります。db_ownerは、テーブル定義を変更する権限も与えます。
Oskar Berggren 2018

3
これは、ユーザーがチェックした場合は機能しません。db_denydatareadeまたはdb_denydatawriter
Kolob Canyon 2018


0

データベースのスペースを確認してください。このエラーは、データベースに指定されたスペースと比較してスペースが増加した場合に発生します。


データベースのユーザーIDとパスワードも変更します
Nilesh

0

SSMSを使用して、ユーザーがデータベースとReportServerの両方に対する接続権限を持っていることを確認しました。

クエリ対象の特定のデータベースのプロパティで、資格情報をマッピングし、データリーダーとパブリックアクセス許可を有効にしました。また、他の人が述べているように、拒否/拒否書き込みボックスが選択されていないことを確認しました。

彼らは選択した権限を持っているだけでよいので、レポートの場合はデータベースの所有権を有効にしたくありませんでした。


-1

私はこれを行うことで私の問題を解決します。[重要な注意:特定のアカウントにエスカレートされた(拡張された)特権を許可します。これは、個々のシナリオに必要な特権よりも多い可能性があります]。

  1. SQL ManagementStudioの「オブジェクトエクスプローラー」に移動します。
  2. [セキュリティ]、[ログイン]の順に展開します。
  3. 作業しているユーザーを選択し、右クリックして[プロパティ]ウィンドウを選択します
  4. 選択ページへ移動しますサーバーの役割
  5. sysadminをクリックして保存します。

2
わからない、なぜこの答えが反対票を投じられたのか。この答えは私の問題を解決しました。だから、私は賛成しました。
Emran Hussain 2018

9
この回答は、サーバー全体の完全で完全な完全な制御をユーザーオブジェクトに与えるように読者に露骨に指示しているため、これが何をしているのかを説明または警告することなく、反対票を投じるべきです。質問の文言とこの回答に基づいて、初心者ユーザーが完全に理解せずにこの「修正」を適用する危険性があると思います。
Oskar Berggren 2018

3
これはブルートフォースオプションであり、適用しないでください。これが何をしているのか理解できないなら、あなたはそれをするべきではありません。
N8。

全員-本番環境ではこれを行わないでください。
gotqn

もちろん、私は製品ではそれをしませんが、それは私の問題を解決しました(開発環境で)。だからそれは私の賛成に値する。ccassobに感謝します。
Fl4v

-2

Pleskパネルまたは他のパネルサブスクリプションの有効期限が切れている可能性があります...サブスクリプションの終了を確認してください。


あなたの答えの周りにいくつかのより多くの説明を提供してください
asolanki
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.