開発環境のユーザは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