SQL Server 2005/2008を使っているときは、SQL Server Management Studio を使うと便利だ。
Microsoft SQL Server Management Studio Express
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796
使っているけど(多分)Express版でも製品版でも同じ。GUIでぽちぽちするだけで構成がわかるので便利なんだけど。落とし穴がある(のかな?)。
特定のテーブルへのアクセス制限をするときに、
1.ロールを作る。
2.ロールへログインユーザを加える。
3.ログインユーザからdb_ownerを外す。
4.ロールにテーブルアクセス権を与える。
ということをすると思うんだが。
# 最近はアクセス権自体を触らないDBA(とは言わないな)もいるので、
# なんとも言えませんが。
SQL Server 6.0の頃はEnterprise Managerを使って、スクリプトを吐き出していた。そして手で少し修正するぐらい。
で、同じようにのManagement StudioのGUIでロールを作成、アクセス権の設定をした後に、スクリプトを吐き出してみたら、、、あらら、先の2,3,4のスクリプトが全く吐き出されていないじゃないですか!
具体的に書くと、次のように limit ロールと、normal ユーザがスクリプトで作成できているのだが、
CREATE ROLE [limit] AUTHORIZATION [dbo] GO CREATE LOGIN [normal] WITH PASSWORD=N'normal', DEFAULT_DATABASE=[sampledb], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF GO
以下のように db_owner から取り除いたり、limit ロールに加えたりするコマンドが何処にもありません。
exec sp_droprolemember 'db_owner', 'normal' go exec sp_addrolemember 'limit', 'normal' go
更に言えば、アクセス権の設定も全くでていません。
ん~、どうなんでしょうね。sp_droprolemember, sp_addrolemember のシステム系のストアドをヘルプから探さないとデータベースの構成情報が作れない、というのどんなもんなんでしょう?
というわけで、これから手作業でデータベース構築のスクリプトを書かなければならず。しくしく。