
SQL Server 2008R2/2012でのVIEWのアクセス権限の付与について
パケージのシステムを構築しており、ユーザにVIEWの読み取り権限だけを公開したいと考えています。
ユーザは、SQL Server Management StudioでそのVIEWに対してSELECTだけできるようにしたいのですが、やってみるとVIEWに対しての権限の他に元となるテーブルのアクセス権限も必要となり、見せたくないテーブルとそのテーブルの列が見えてしまいます。
なんとか、DBへの特定のログインユーザだけVIEWに対して読み取り(SELECT)ができようなユーザが作れないでしょうか?
アドバイスをお願いします。
No.2ベストアンサー
- 回答日時:
詳細な情報が無いので、
「できますよ」としか言えませんが、
注意として、create view するユーザーは
元テーブルへのアクセス権限が必要です。
この回答への補足
元テーブルへのアクセス権限がナイトのエラーが発生してうまく見れませんでした。
元テーブルを見せずにVIEWだけを公開したいと考えており、それをやる方法は無いという認識でいます。
発生したエラー
1> select count(*) from viewSchema.viewdept;
2> go
メッセージ 916、レベル 14、状態 1、サーバー DRIFTER、行 1
現在のセキュリティ コンテキストでは、サーバー プリンシパル "testuser" はデータベ
ース "HOGEHOGE" にアクセスできません。
こうなるとtruncateして、insert selectでテーブルコピーをしてviewではなく、テーブルで公開するという方法しか無いのかなぁって思っています。
考え方はあっているでしょうか?
No.1
- 回答日時:
キーワード「GRANT」でググる。
そのユーザーにオブジェクトを与えすぎてるからテーブルまで見えちゃう。
この回答への補足
皆様のアドバイスを頂いて、VIEWが見ている先のDBにもSELECT権限を付与して参照用のログインユーザを作りました。ちょっと複雑ですが、これで行きます。ありがとうございました。
create database viewdb;
go
create login viewlogin with password = 'test',check_expiration=off,check_policy=on,default_database=viewdb;
go
use viewdb;
go
create user viewuser for login viewlogin;
go
use mst
create user viewuser for login viewlogin;
--create schema viewSchema authorization viewuser;
--create view viewSchema.viewDept as (select *, 1 hoge, 2 hogehoge from mst.dbo.department);
use viewdb;
go
--drop view viewLine;
create view viewLine as (select l.sLINE_CD, l.sDEPT_CD, l.sNMJ, 1 hoge, 2 hogehoge from mst.dbo.Line l);
go
use viewdb;
--alter role viewRole drop member viewuser;
--drop role viewRole;
create role viewRole authorization dbo;
alter role viewRole add member viewuser;
grant select on object::viewLine to viewRole;
--ユーザ付与でもいい
--grant select on object::viewLine to viewuser;
use mst;
--alter role viewRole drop member viewuser;
--drop role viewRole ;
create role viewRole authorization dbo;
alter role viewRole add member viewuser;
--revoke select on object::Line to viewRole;
grant select on object::Line(sLINE_CD, sDEPT_Cd, sNMJ) to viewRole;
--ユーザ付与でもいい
--grant select on object::Line(sLINE_CD, sDEPT_Cd, sNMJ) to viewuser;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- その他(開発・運用・管理) ユーザ権限でソフトを起動すると必ず管理者パスワードをきかれてうまく利用できない 3 2022/05/10 00:07
- PHP MySql PHP 2つのテーブルをJOINで結合 user_idで抽出 1 2023/01/03 14:04
- その他(開発・運用・管理) Windowsバッチファイルでリモートデスクトップを自動ログインするが確認画面が出る対処方法 1 2022/12/19 15:48
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- ルーター・ネットワーク機器 NUROのルータF660Aについて 2 2022/09/07 11:44
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- サーバー Windows2019CALとRDS CALについて 1 2022/06/19 13:48
- サーバー Windowsサーバでグループを検索したい 1 2023/04/17 15:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンボボックスで入力したもの...
-
クエリのキャンセルがいつにな...
-
accessテーブル作成クエリを実...
-
AccessでOracleのテーブルをリ...
-
SI Object Browserのテーブルス...
-
列サイズ変更時、DB停止は必要?
-
ADOでSeekメッソッドが使えませ...
-
ユニオンクエリの結果をテーブ...
-
Access2000のテーブルをADOで複...
-
エクセルでテーブルの最終行が...
-
Access のリレーションシップで...
-
Accessでバージョン違いのファ...
-
テーブルデザインの書き出しで...
-
SQLServer2005の列数
-
excel テーブル
-
アクセス→オラクルの方法は?
-
AccessVBAで降順にするテーブル...
-
ACCESS2007 フォーム 「バリア...
-
「マスタ」と「テーブル」の違...
-
SELECT文でのデッドロックに対...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SI Object Browserのテーブルス...
-
クエリのキャンセルがいつにな...
-
accessテーブル作成クエリを実...
-
ユニオンクエリの結果をテーブ...
-
あるテーブルのデータを追加、...
-
エクセルでテーブルの最終行が...
-
UNIONなどで複数のテーブルから...
-
SQLサーバーのテーブルの値...
-
列サイズ変更時、DB停止は必要?
-
コンボボックスで入力したもの...
-
ストアドをまたがるローカル一...
-
レプリケーションしているテー...
-
VIEWしか読み取れないユーザの...
-
ACCESS-リンクテーブルの設定で...
-
ADOでSeekメッソッドが使えませ...
-
重複するレコードに対しフラグ...
-
AccessVBAで降順にするテーブル...
-
アクセスのテーブル作成クエリ...
-
Accessでバージョン違いのファ...
-
AccessでOracleのテーブルをリ...
おすすめ情報