アプリ版:「スタンプのみでお礼する」機能のリリースについて

WindowsXPのOracle9i環境にて、
まず、以下のようにしてユーザ「username」を作成しました。

create user username identified by Password default tablespace tab_space temporary tablespacetemp;
grant dba,resource,connect to username;

次にsysユーザにて、CREATE DIRECTORY FILE_PATH as 'd:\temp';
ディレクトリを作成しました。
そして、そのディレクトリに対して、以下のように権限付与しようとすると、「ユーザ"username"が存在しません。」エラーが発生します。
grant READ,WRITE ON directory dir to username;
また、grant READ,WRITE ON directory dir to public;
とすると、権限付与は成功しますが、ユーザusernameにはディレクトリ参照権限は与えられていませんでした。

何か間違っておりますでしょうか?
それとも何か手順で足らないものがあるのでしょうか?
ご教示いただければと思います。

A 回答 (4件)

dba_usersに出てこない以上、そのユーザはデータベース上には存在しないかと思います。



そのパッケージソフトが、どのような構成をしているのかわかりませんが、パッケージ上のユーザとデータベースのユーザが別なのではないでしょうか。

パッケージ上のAというユーザが、データベース上のXというユーザにログインして動作するというのは、よくあるパターンです。

パッケージのサポートに確認するのが良いかと思います。
    • good
    • 1
この回答へのお礼

おっしゃるとおりですね。どうも色々とありがとうございました!

お礼日時:2008/12/24 00:27

提示した手順を行なってもユーザーが作成できないということでしょうか。



その場合、障害としか思えません。

ではなくて、当初作成したというユーザが存在しないという場合、作業間違いでユーザが作成できていないと思われます。
dba_usersに表示されない以上、そうとしか思えません。

再度、提示した手順を行い、その内容を提示してください。
でなければ、どの点がわるいのか切り分けできません。
    • good
    • 0
この回答へのお礼

本当に一から、つまり表領域からユーザから作成した場合はうまくユーザ作成できておりました。
今回の件ですが、説明不足で大変申し訳ありませんでしたが、あるパッケージにて自動作成されたユーザになります。ログから推測するに通常のユーザ作成かと思っておりましたが、ひょっとすると特殊な作成をされているのかもわかりません。
逆に、当然ながらDBには普通にログインできるユーザに対してそのようにSYSユーザからは見えないようなユーザにすることができるものなのでしょうか?
結局はそのユーザにディレクトリ権限を与えたいだけなのですが・・・。
申し訳ありません。ご教示いただければと思うのですが。。

お礼日時:2008/12/23 11:57

9iでやってみましたが、問題なく動きます。


(パッチも当ててないです)

>次にsysユーザにて、CREATE DIRECTORY FILE_PATH as 'd:\temp';
>ディレクトリを作成しました。
ここでディレクトリの名前が「FILE_PATH」ですが、
>grant READ,WRITE ON directory dir to username;
上のSQLでは「dir」になってます。
この辺が原因では?

p.s. ファイル出力は、3rd_001さんのを使用させていただきました。

----------------------------------------------- 以下はログ
C:\>sqlplus "sys/sysman as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on 日 Dec 21 17:05:26 2008

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
に接続されました。
SQL> create user username identified by hoge default tablespace users temporary
tablespace temp;

ユーザーが作成されました。

SQL> grant dba,resource,connect to username;

権限付与が成功しました。

SQL> CREATE DIRECTORY FILE_PATH as 'c:\temp';

ディレクトリが作成されました。

SQL> grant READ,WRITE ON directory FILE_PATH to username;

権限付与が成功しました。

SQL> connect username/hoge
接続されました。
SQL> declare
2 fh utl_file.file_type;
3 begin
4 fh := utl_file.fopen( 'FILE_PATH','hoge.txt','a',32767);
5 utl_file.put_line(fh, 'hoge');
6 utl_file.fclose(fh);
7 end;
8 /

PL/SQLプロシージャが正常に完了しました。

SQL> host dir c:\temp
c:\temp のディレクトリ
2008/12/21 17:10 6 hoge.txt

SQL> host type c:\temp\hoge.txt
hoge

SQL>
    • good
    • 1

当方、11gですが記載されている手順をそのまま実行したところ


全く問題なく出来ております。

以下が実際のSQLと結果です。
そちらの環境で、以下を実行しても駄目でしょうか?

Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
に接続されました。

SQL> create user test01 identified by test01
default tablespace users
temporary tablespace temp;

ユーザーが作成されました。

SQL> grant dba,resource,connect to test01;

権限付与が成功しました。

SQL> CREATE DIRECTORY FILE_PATH as 'c:\temp';

ディレクトリが作成されました。

SQL> grant READ,WRITE ON directory FILE_PATH to test01;

権限付与が成功しました。

SQL> declare
fh utl_file.file_type;
begin
fh := utl_file.fopen( 'FILE_PATH','hoge.txt','a',32767);
utl_file.put_line(fh, 'hoge');
utl_file.fclose(fh);
end;
/
PL/SQLプロシージャが正常に完了しました。

SQL> exit
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing optionsとの接続が切断されました。

more c:\temp\hoge
hoge
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
作成したユーザーがSYSユーザーから見えていないようで権限付与ができません。
select username from dba_usersで確認した中に見当たりません。なので権限付与ができないのです。「ora-01917ユーザー又はロールは存在しません。」が発生します。

お礼日時:2008/12/22 16:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す