Date: Sat, 22 Jun 2002 09:38:32 +0900
From: "Akira Horikawa" <who@example.ne.jp>
堀川です、おはようございます
-----Original Message-----
From: who@example.co.jp [mailto:who@example.co.jp]
Sent: Wednesday, June 19, 2002 8:47 PM
To: who@example.ne.jp
Subject: [ml-msde-beg:00318] ACCESSの連結フォームでグローバル一時テーブ
ルを更新するには?
#ちょっと初心者的な質問を超えているような感じ。。。。
>ストアードプロシージャで作成したグローバル一時テーブルを、
>ACCESS連結フォームのレコードソースに設定し、追加、更新
>を行おうとしています。
>saユーザであれば更新可能なのですが、その他のユーザだと
>読込み専用になってします。
まず最初に、
(1)saログインだけ、SELECTや更新系のSQL文の実行ができる
(2)他のユーザは、SELECTだけ許可され、更新系の命令が実行できない
という状況では、何を疑ったらよいでしょうか?
テーブルに対するセキュリティ違反が発生しているわけです
SELECT、UPDATE、INSERT、DELETEの権限が許可されていないと
テーブルに対する操作は禁止されます。
そのテーブルが、グローバル一時テーブルになっているわけです。
グローバル一時テーブルにも、セキュリティが働きます。
グローバル一時テーブルは、tempdbデータベースの中に作成されます。
グローバル一時テーブルの名前が、
##gtbl
とすれば、
##gtbl
という名前の実際のテーブルが、tempdbの中に作成されます。
ただSQLServer2000などでは、このようなテーブル名は表示されません。
しかし、tempdbのsysobjectsシステムテーブルを開くと、オブジェクトの
名前に、##gtbl が存在することがわかります。
テーブルに対するセキュリティ設定は、grant文を使います。
GRANT ステートメント命令 ON テーブル名 TO ユーザ名
の書式です。
ただ注意するのは、GRANT文は、カレントデータベースに対する
セキュリティ設定をする命令です。
このためグローバル一時テーブルに対するセキュリティ設定を行なう
ためにはtempdbに接続しなければいけません。
Use tempdb
GRANT UPDATE ON ##gtbl TO UserName
問題は、誰にセキュリティを許可するか?
tempdbのデータベースユーザ名を指定してください。
tempdbのデータベースユーザは、デフォルトでは、dbo や guest
しかいません。
新しいデータベースユーザを登録しても良いですが、guestユーザ
に許可を与えたらどうでしょうか?
GRANT ALL ON ##gtbl TO guest
ALLで、すべての権限が与えられます。
グローバル一時テーブルを作成した後に、カレントデータベースを
tempdbにしたら、上記のGRANT文を実行しましょう。
余談ですが、tempdbデータベースでは、一般のデータベースに比べて
Insert命令が最大で4倍速いそうです。
(データベースのログ管理が他のDBと違う。『Inside SQLServer』参照)
トランザクションログ管理が不要になるため、作業用テーブルは
普通のデータベースの中に作成するのではなく、tempdbの中に
作成した方が良いわけです。
------------------------------------
(株)日本技術ソフト開発
堀川 明 (Akira Horikawa)
06月22日(土曜日) 09時38分記
mailto:who@example.ne.jp
http://www.horikawa.ne.jp/msde/
[MSDE/SQLServerに関して、今、どんなことにお困りですか?] |
よろしければお困りの内容を、電子メールで教えて下さい。 |
質問を電子メールで作成する
|
[ウィンドを閉じる][MSDE/SQLServer FAQ ][MSDE / MSDE2000 技術サポート情報一覧]
|