Sybase 資料一覧

アクセス権の考え方と実際の設定方法

2007/10/6更新

対応バージョン: 11.9.2

Adaptive Serverのセキュリティはサーバアクセス、データベースアクセス、データアクセスの3層に分かれたシステムに基づいている。

サーバアクセス用アカウント作成

サーバに接続するにはサーバに「ログイン」する必要があるので、まず該当サーバに対してログイン用のアカウントを作成する。

ここで注意したい点として、Adaptive Serverにログインしたからといってデータベースにアクセスできるわけではないということである。

作成したアカウントは単にAdaptive Serverに接続することができるようになっただけなので、データベースにアクセスするためにはさらに後述のデータベースアクセス用アカウントを登録する必要がある。

サーバアクセス用アカウントを作成するにはsp_addloginを実行する。

sp_addloginの構文は以下のとおりである。

sp_addlogin <アカウント名>, <パスワード>
  [, <該当アカウントのデフォルトデータベース>]
  [, <デフォルト言語> [, <アカウントのフルネーム>]]]

デフォルトデータベースとはAdaptive Serverに接続した際にデフォルトで選択するデータベースである。

デフォルトデータベースを指定しない場合は暗黙のうちにmasterデータベースが指定される。

例) fooアカウントを作成し、デフォルトデータベースをdb1に設定する

1> sp_addlogin foo,<パスワード>,db1
2> go
Password correctly set.
Account unlocked.
New login created.

作成したアカウント情報はmaster..sysloginsテーブルに格納される。

格納された情報を確認するにはsp_displayloginを使用する。

sp_displayloginの構文は以下のとおりである。

sp_displaylogin [アカウント名]

アカウント名を省略すると自分自身のアカウント情報が表示される。

例)

1> sp_displaylogin foo
 Suid: 5         
 Loginame: foo
 Fullname: 
 Default Database: db1
 Default Language: 
 Configured Authorization:
 Locked: NO                            
 Date of Last Password Change: Mar  6 2002  9:36PM 

データベースアクセス用グループ作成

システム管理者とデータベース所有者は個々のアカウントのほかにデータベースアカウントの「グループ」を作成できる。

グループはグループ名で識別され、複数のアカウントに対するパーミッションの付与や取り消しを1文で行うことができる。

例えば「managers」「payroll」といったグループを定義し、そのグループにアカウントを割り当てればそのグループ全体に権限を割り当てるだけでグループの全アカウントに対して同じ権限を割り当てることができる。

また、全てのデータベースアカウントが所属するシステム定義グループ「all」もある。

グループの作成にはsp_addgroupを使用する。

sp_addgroupの構文は以下のとおりである。

sp_addgroup グループ名

例)

1> use db1
2> go

1> sp_addgroup admin
2> go
New group added.

登録した情報は該当データベースのsysusersテーブルに格納される。

格納された情報を確認するにはsp_helpgroupを実行する。

sp_helpgroupの構文は以下のとおりである。

sp_helpgroup [グループ名]

グループ名を省略すると現在のデータベースの全てグループが表示される。

例)

1> sp_helpgroup
2> go
 Group_name Group_id 
 ---------- -------- 
 admin         16390 
 public            0 

データベースアクセス用アカウント登録

次にユーザがデータベースに接続できるようにするために、対象となるデータベースに対してsp_adduserを実行してアカウントを登録する。

sp_adduserの構文は以下のとおりである。

sp_adduser <アカウント名> [,<新しいアカウント名(Alias)> [, <所属グループ名>]]

新しいアカウント名(Alias)を付けずにログインアカウント名をそのままアカウント名として使用したい場合は第2引数に「null」を指定する。

所属グループ名を省略すると暗黙のうちにpublicグループが指定される。

所属グループ名を指定すると、所属グループは指定したグループ、及びpublicになる。

例)

1> use db1
2> go

1> sp_adduser foo,null,admin
2> go
New user added.

登録したアカウント情報は該当データベースのsysusersテーブルに格納される。

格納された情報を確認するにはsp_helpuserを使用する。

sp_helpuserの構文は以下のとおりである。

sp_helpuser [現在のデータベース内のアカウント名]

アカウント名を省略すると現在のデータベース内の全てのアカウント情報を表示する。

例)

1> sp_helpuser
2> go
 Users_name ID_in_db Group_name Login_name        
 ---------- -------- ---------- ---------- 
 dbo               1 public     sa                
 foo               3 admin      foo            

また、所属グループの状態を見ると該当アカウントが登録されているのが確認できる。

例)

1> sp_helpgroup admin
2> go
 Group_name Group_id Users_in_group Userid 
 ---------- -------- -------------- ------ 
 admin         16390 foo                 3 

データアクセス用パーミッション設定

ログインとアカウント名があれば個別にサーバやデータベースにアクセスできるが、テーブルやビューのデータの選択、テーブルのデータの修正、ストアドプロシージャの実行に対するパーミッションは自動的に与えられない。

データベースオブジェクトへのアクセスパーミッションをユーザに与えるにはシステム管理者またはデータベース所有者がユーザかユーザの所属するグループに対してオブジェクトへのアクセスパーミッションを明示的に付与する必要がある。

逆に、saユーザは全てのデータベースに対して無制限のアクセス権限を持つので適切なパーミッションをユーザに与えた後は使用不能(ロック)にしたほうがよい。

付与すべきパーミッションには以下のようなものがある。

sa_role

システム管理者

sso_role

セキュリティ担当者

oper_role

オペレータ

これらパーミッションをgrant roleにて適切なアカウントに付加する。

パーミッションを剥奪する場合はrevoke roleを使用する。

grant role、revoke roleの構文は以下のとおりである。

grant role <role名> to <アカウント>

revoke role <role名> from <アカウント>