権限付与忘れチェック。



開発環境のユーザはdb_ownerなので気にしていなかったが、
本番環境にもっていったときに権限つけ忘れすることありませんか?

システムの修正で小さいビューやストアド追加したときに忘れるんですけど、そうですか、ぼくだけですか

ということで、権限漏れをチェックしつつ、それっぽいGRANT文を吐きだしてくれるSQL文

-- ◆ユーザへの権限設定漏れ確認
BEGIN
-- ↓対象のユーザ名を設定
DECLARE @name sysname = 'XXXXX'
-- 一時テーブルを作成(対象ユーザで許可している内容)
CREATE TABLE #temp( 
[owner] sysname
, [object] sysname
, [grantee] sysname
, [grantor] sysname
, [protecttype] char (10)
, [action] varchar (20)
, [column] sysname
) 
INSERT INTO #temp EXECUTE sp_helprotect @username = @name 
--テーブル・ビュー・ストアド一覧の内容とぶつける
SELECT
B.NAME AS OWNER
, A.NAME
, A.TYPE
, CASE A.TYPE 
WHEN 'P' THEN 'GRANT EXECUTE ON [' + A.[name] + '] TO [' + @name + '];'
WHEN 'U' THEN 'GRANT SELECT,INSERT,UPDATE,DELETE ON [' + A.[name] + '] TO [' + @name + '];'
WHEN 'V' THEN 'GRANT SELECT ON [' + A.[name] + '] TO [' + @name + '];'
ELSE NULL 
END AS OMAKE 
FROM
sysobjects A 
INNER JOIN sysusers B 
ON A.UID = B.UID 
LEFT JOIN #temp C 
ON A.name = C.object 
WHERE
A.TYPE IN ('U', 'IF', 'TF', 'V', 'P') 
AND A.STATUS >= 0 
AND C.object IS NULL 
ORDER BY
A.TYPE
, A.NAME 

-- 一時テーブルを削除
drop table #temp
end