2014年1月24日金曜日

sql server viewのアクセス権限付与 メッセージ 916、レベル 14、状態 1、サーバー hogehoge、行 1

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 件のコメント:

コメントを投稿