on 09-02-2020 4:25 AM
sybaseからsqlanywhereに移行したテーブルの所有者をsaユーザとして
別途作成したユーザ(manager及びguest)からも参照できるよう設定する場合、どのように設定すればよいでしょうか。
SQL Central から ユーザを作成、ユーザごとのテーブル権限で移行したテーブルすべてに権限を与えたと思われるものの外部サーバからDBI接続する際にsaユーザからしか参照できませんでした。
外部から接続するコマンドは下記になります。
$conn=DBI->connect("DBI:${db_system}:DBN=${db_name};host=${db_host}:${db_port}","${db_user}","${db_passwd}");
外部サーバからDBI接続される際にsaユーザ以外から参照できないとのことですが、 何らかのエラーメッセージなどは表示されましたでしょうか。
具体的なエラーコードなどがありましたらお知らせください。
また、別途作成されたユーザ(manager及びguest)はSQL Centralからテーブルを参照 することは可能でしょうか。
なお、sp_displayroles システムプロシージャを使用することでユーザ毎の権限や ロールなどを表示することができますので、saユーザと他のユーザの設定について ご確認ください。
例)Interactive SQLから次の文を実行します。
CALL sp_displayroles( 'sa' );
詳細につきましては次のドキュメントをご参照ください。
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
perlスクリプトを使用して接続しており、抜粋ですが下記内容になります。
#!/usr/local/bin/perl/perl
use DBI;
$db_system="SQLAnywhere";
$db_name ="testDB";
$db_host ="test-server";
$db_port ="5551";
$db_user ="guest";
###$db_user ="manager";
###$db_user ="sa";
$db_passwd="manager";
###$db_passwd="sa";
$conn=DBI->connect("DBI:${db_system}:DBN=${db_name};host=${db_host}:${db_port}","${db_user}","${db_passwd}");
open(OUT,"> /var/tmp/list_arr.csv");
$query="select * from COM_M_TBL";
$result=$conn->prepare($query);
$result->execute;
$ret_flg_empty=(@row=$result->fetchrow_array);
if(!$ret_flg_empty){
print "検索結果なし!!\n";
}
以降、テーブル内のデータをCSVに出力する内容です。
saで実行すると、COM_M_TBL内のデータがCSVに出力され
manager/guestの場合は
DBD::SQLAnywhere::db prepare failed: テーブル 'COM_M_TBL' が見つかりません。 (DBD: prepare failed) at ./test3.pl line 18.
Can't call method "execute" on an undefined value at ./test3.pl line 19.
となり、テーブルが見つからない状態です。
SQL Central でのmanager/guestの接続はでき、該当テーブルも一覧で表示され、データも確認ができました。
CALL sp_displayroles( 'sa' );とmanagerの結果は画像の通りで
差分となっているロールにmanagerを含めても変わりはありませんでした。
データベースの知見がなく申し訳有りませんが
再度確認した結果、managerやguestにてログイン自体はできているもののselect文でエラーになっておりました。
所有者がsaの場合、saユーザでは select * from [table_name] で問題ありませんが
managerユーザの場合は select * from sa,[table_name] とテーブル名の前に所有者の指定が必要でした。
該当テーブルをどのユーザからも上記のように所有者の指定がいらないようにしたい場合は
どのように設定すればよいでしょうか。テーブルに対して複数のユーザを所有者とすることはできませんでしょうか。
ユーザ拡張ロールを使用することで問題ございません。
次のKBAと同じ方法となります。
User | Count |
---|---|
88 | |
10 | |
10 | |
9 | |
7 | |
7 | |
6 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.