cancel
Showing results for 
Search instead for 
Did you mean: 

sybaseからsqlanywhereに移行したテーブルの所有者ユーザ以外のユーザから参照させる方法

0 Kudos

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}");

Accepted Solutions (0)

Answers (1)

Answers (1)

former_member182948
Active Participant
0 Kudos

外部サーバからDBI接続される際にsaユーザ以外から参照できないとのことですが、 何らかのエラーメッセージなどは表示されましたでしょうか。

具体的なエラーコードなどがありましたらお知らせください。

また、別途作成されたユーザ(manager及びguest)はSQL Centralからテーブルを参照 することは可能でしょうか。

なお、sp_displayroles システムプロシージャを使用することでユーザ毎の権限や ロールなどを表示することができますので、saユーザと他のユーザの設定について ご確認ください。

例)Interactive SQLから次の文を実行します。

CALL sp_displayroles( 'sa' );

詳細につきましては次のドキュメントをご参照ください。

"sp_displayroles システムプロシージャ"

0 Kudos

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を含めても変わりはありませんでした。

0 Kudos

データベースの知見がなく申し訳有りませんが

再度確認した結果、managerやguestにてログイン自体はできているもののselect文でエラーになっておりました。

所有者がsaの場合、saユーザでは select * from [table_name] で問題ありませんが

managerユーザの場合は select * from sa,[table_name] とテーブル名の前に所有者の指定が必要でした。

該当テーブルをどのユーザからも上記のように所有者の指定がいらないようにしたい場合は

どのように設定すればよいでしょうか。テーブルに対して複数のユーザを所有者とすることはできませんでしょうか。

0 Kudos

saアカウントをユーザ拡張ロールに変更し、manager及びguestにロールを適用

manager及びguestのテーブル権限に各テーブルの権限を割り当てることで

select * from [table_name] で表示できました。

上記内容で対処としては問題ないでしょうか。

former_member182948
Active Participant
0 Kudos

ユーザ拡張ロールを使用することで問題ございません。
次のKBAと同じ方法となります。

2290163 - How to grant unqualified access to a table