RSS 開発、セキュリティ、日記
) Please read my disclaimer.
create procedure ##t
as
select top 1 * from pubs.dbo.titles
go
exec sp_addlogin 'UserA', 'password', 'pubs'
use pubs
exec sp_grantdbaccess 'UserA'
deny select on titles to [UserA]
exec ##t
「SELECT 権限は、オブジェクト 'titles'、 データベース 'pubs'、所有者 'dbo' にありません。」
exec sp_revokedbaccess 'UserA'
exec sp_droplogin 'UserA'
create procedure ##t2
SELECT SYSTEM_USER
IF SYSTEM_USER <> 'DOMAIN\UserP'
RETURN
SELECT 'OK'
exec ##t2
5:0 AM | Add Comment | #SQL Server #Security
Name
EMail
Homepage
Remember Me
Comment (HTML not allowed)
Books Online に明確な表記がないようでしたので、
簡単にテストしてみました。
この件は、PASSJ セキュリティ分科会のML にもだしました
■概要
## で始まる一時ストアドプロシージャでは、
所有権の継承は行われない
■テスト
SQL Server 2000 SP3a
Windows 2000 Server
■内容
ストアドプロシージャは、通常、所有権の継承が行われます。
しかし、##test のように ## で、始まる名前をもつ
一時ストアドプロシージャは、継承されていませんでした。
例:
ログイン sa で接続して、
次にログイン userA を作成したあと、
pubs にユーザー userA を追加し、
titles テーブルへのアクセスを拒否します。
テスト終了後、ログイン,ユーザーを削除します
## で始まる一時ストアドプロシージャは、
どのログインからでも呼び出すことができます。
さらに、特定のログインやユーザーにのみ、実行を
許可したり、拒否する機能がありません。
したがって、このようなストアドプロシージャの実装時には、
各自が適切なユーザーからのみ呼び出せるようにする
必要があるのではないかと考えました
たとえば、SYSTEM_USER を評価して、適切なログインのみ
実行を許可するという方法です。
例:
確認できましたので、特にこのような実装は必要ないかと
思います。
※もしかしたら、継承させる方法があるのかもしれませんが。
※継承できないのは、それはそれで、使いにくい場合もあるかも。
5:0 AM | Add Comment | #SQL Server #Security