SQL Serverで他のデータベースのテーブルを「シノニム」を通して参照(SELECT)する。
「シノニム」とは、テーブルやビューなどのオブジェクトの別名のこと。
これを作成する際に、別データベースを指定し、参照することができる。
なお、今回の環境は以下です。
- Windows Server 2008 R2 Standard
- SQLServer Standard 2008 R2
参照元データベースにシノニム作成
「SQL Server Management Studio」を開き、ログインする。
左側の「オブジェクトエクスプローラ」⇒参照元データベース⇒「シノニム」を右クリックし、「新しいシノニム」を開く。
左側の「ページの選択」で「全般」を選択し、下記を入力し、シノニムを作成する。
- シノニム名…任意の名前
- シノニムスキーマ…「dbo」
- サーバー名…参照先サーバー名
- データベース名…参照先データベース名
- スキーマ…「dbo」
- オブジェクトの種類…「テーブル」
- オブジェクト名…参照先テーブル名
参照先データベースにデータベースユーザー作成
左側の「オブジェクトエクスプローラ」⇒参照先データベース⇒「セキュリティ」⇒「ユーザー」を右クリックし、「新しいユーザー」を開く。
左側の「ページの選択」で「全般」を選択し、下記を入力する。
- ユーザー名…任意の名前
- ログイン名…参照元データベースのユーザー名
- 既定のスキーマ…「dbo」
参照先テーブルへ権限割り当て
左側の「ページの選択」で「セキュリティ保護可能なリソース」を選択する。
検索を押下し、「オブジェクトの追加」を開く。
「この種類のすべてのオブジェクト」にチェックを入れ、「オブジェクトの種類を選択」を開き、テーブルにチェックを入れる。
「セキュリティ保護可能なリソース」に一覧が表示されるので、参照先のテーブルを選択し、必要な権限にチェックを入れる。
今回はテーブル参照をしたいので、「参照」と「選択」にチェックを入れた。
なお、「選択」にチェックを入れないとSELECT文で、以下のようなエラーになった。
「SELECT 権限がオブジェクト ‘参照先テーブル名’、データベース ‘参照先データベース名’、スキーマ ‘dbo’ で拒否されました。」
そういうもんなのかな?
まあ、細かいことは気にしない。
特定の列だけなど、より詳細な権限を指定したい場合は「列権限」ボタンを押下し、設定ができる。
コメント