web-dev-qa-db-ja.com

オブジェクト 'Users'、データベース 'XXX'、スキーマ 'dbo'に対するSELECT許可が拒否されました

データベースをSQL Server 2012から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にアクセスできるようにするにはどうすればよいですか?

54
Old Geezer

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

GRANTそのデータベース内のテーブルに対するSELECT、INSERT、UPDATE、DELETEなどのユーザー固有のパーミッション。

61
Rahul Tripathi

選択権限を付与する構文は次のとおりです。

USE YourDB;

GRANT SELECT ON dbo.functionName TO UserName;
23
John Hayhow

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

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

    db_denydatareader

    db_denydatawriter

enter image description here

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

10
Kolob Canyon

そのユーザーに権限を付与する必要があります

1
billah77

データベースのスペースを確認します。このエラーは、データベースに割り当てられたスペースと比較してスペースが増加したときに発生します。

0
Nilesh

これを行うと問題が解決します。 [重要な注意:特定のアカウントにエスカレートされた(拡張された)権限を許可します。個々のシナリオに必要な権限を超える場合があります]。

  1. SQL Management Studioの「Object Explorer」に移動します。
  2. セキュリティ、次にログインを展開します。
  3. 作業しているユーザーを選択し、右クリックしてPropertiesを選択します。
  4. ページを選択してください、Go to Server Roles
  5. sysadminでクリックして保存します。
0
ccassob

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

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

レポートには選択権限のみが必要であるため、レポートのデータベース所有権を有効にしたくありませんでした。

0
Aloha480