SQL Server Management Studioでデータベース構成情報が作れない

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 のシステム系のストアドをヘルプから探さないとデータベースの構成情報が作れない、というのどんなもんなんでしょう?

というわけで、これから手作業でデータベース構築のスクリプトを書かなければならず。しくしく。

カテゴリー: 開発 パーマリンク