SQL Server 2012/2008R2
2> select top 10 hoge from viewdept;
3> go
メッセージ 916、レベル 14、状態 1、サーバー hogehoge、行 1
現在のセキュリティ コンテキストでは、サーバー プリンシパル "testuser" はデータベース "MST" にアクセスできません。
とのエラーが発生した。
viewはその先の参照テーブルのテーブルにも権限が必要。
1)ロールを使った場合のやり方
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.lineCd, l.deptCD, l.name, 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;
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(lineCd, deptCD, name) to viewRole;
2)ロールをつかわない場合のやり方
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.lineCd, l.eeptCd, l.name, 1 hoge, 2 hogehoge from mst.dbo.Line l);
go
use viewdb;
--ユーザ付与でもいい
grant select on object::viewLine to viewuser;
use mst;
--ユーザ付与でもいい
grant select on object::Line(lineCd, deptCd, name) to viewuser;
ログインとユーザが分かれている部分などは、OracleやMySQLとは違うので留意しておく必要がある。
また、ログインは、Windows認証とSQL Server認証があるので、こちらも抑えておく必要がある。
0 件のコメント:
コメントを投稿