2

最近、Windows から ubuntu に変更しましたが、再作成しようとしている postgresql データベースのアクセス許可に問題があります。

私の問題は次のとおりです。csv ファイルを postgresql データベースにインポートするスクリプトがあります。データは複数のcsvファイルにあり、psycopg2を使用してラッパーでインポートを処理しています。

ただし、ユーザー権限に問題があります。

ファイルを実行するには、各csvファイルのアクセス許可を手動で変更する必要があります(一括で実行できます)。これにより、「その他の」アクセス許可が読み取りと書き込みに設定されます。

これは、最初にデータベースをセットアップした方法に問題がありますか? もしそうなら、どうすればそれを修正できますか。

明確にするために:

インポートを許可するために、データベースの設定を変更して、「その他」の設定に手動でアクセス許可を変更する必要がないようにする方法を知りたいです。

リクエストにより追加されたスクリプト

import psycopg2 as psy
import sys

conn = psy.connect("dbname = 'name' host='localhost' user = 'postgres' password ='password')
curs = conn.cursor()
tablename = 'tabname'
filename  = 'filename'

Input = "COPY %s FROM %s WITH CSV HEADER" % (tablename, filename)
curs.copy_expert(Input, sys.stdin)

conn.commit()
curs.close()
conn.close()

これには、ファイルとテーブルの間を簡単に移動するためのラッパーがあります

私はそれが機能することを知っていますが、「他の人」がそれらを読み書きできるように、csv ファイルのアクセス許可を手動で変更する必要があります。

なぜそうなのか知りたい

4

2 に答える 2

2

copy_expert回避策 -を次のように置き換えcopy_fromます。

f = open(filename)
curs.copy_from(f, tablename, ...)

このように、スクリプトはサーバー プロセスではなく CSV ファイルを読み取るため、権限を微調整する必要はありません。

于 2012-04-09T00:03:05.000 に答える
1

Unix システムでは、ファイルシステムのパーミッションが適用されます。データに対する権限でアクセスが許可されていない限り、ユーザー プロセスは別のユーザーが所有するデータにアクセスできません。これらの制約を受けない唯一のユーザーはrootアカウントです。しかし、root非常に強力であるため、rootどうしても必要な場合を除き、プロセスを実行しないでください。

データをどの程度制限するかに応じて、いくつかのオプションがあります。

  • ファイルをユーザー所有にすることができpostgresます。これは少し鈍い力であり、ユーザーとして CSV ファイルを定期的に操作する必要がある場合は面倒になる可能性があります。現在のアプローチとほぼ同じですが、呼び出しを行う必要があります。(最新のシステムではファイルを譲渡することはできません。)rootchown(1)

    これは似ていますfind /path/to/top -type f -print0 | xargs -0 chown postgres

  • 新しいグループを作成できます。PostgreSQL が実行される補助グループのリストにグループを追加し、そのグループをファイルのグループ所有者にし、グループがこれらのファイルに対する読み取り権限を持っていることを確認します。これは、特にすべてのファイルが 1 つのディレクトリまたは 1 つの階層にある場合は、非常に単純かもしれません。(BSD グループの動作は、ファイルのグループ所有権を巧妙な方法で設定できます。)

    このアプローチには、いくつかの手順が必要です。

    • または同様のコマンドを使用groupadd(8)して、グループを追加します。
    • PostgreSQL 構成を変更して、グループを補助グループ リストに追加します。
    • find /path/to/top -print0 | xargs -0 chgrp group_name
    • BSD グループを使用する場合:
      • オプションmount(8)に関するマンページのセクションを読んでください。bsdgroups mount(8)
      • bsdgroups必要に応じてマウント オプションを/etc/fstabファイルに追加します。
      • ファイルシステムを再マウントして、bsdgroupsマウント オプションを含めます。mount -oremount,bsdgroups /path/to/mount/point
      • ディレクトリにビットを設定setgidします。find /path/to/top -type d -print0 | xargs -0 chmod g+s
  • システム上のすべてのユーザーに、ファイルへの読み取りアクセスを許可できます。これには、コンピューター上のすべてのプロセスをデータで信頼する必要があります。これは、コンピューターが Web、ftp、メール、無関係なクライアントまたはシステムのデータベース サービスなどの無関係なサービスをホストしている場合、適切な決定ではない可能性があります。

    CSVファイルを作成umask(2)するプログラムの設定を変更できる場合があります。このマスクは、ファイルの作成時に適用され、ほとんどのプログラムは設定を上書きしようとしません。ほとんどのシェルでは、シェル自体とすべての子プロセスを簡単に変更できます。CSV ファイルの作成に使用するシェルで実行してみて、その動作を確認してください。(グループとその他の権限をオフにします。PostgreSQL がそれらのファイルも更新しない限り、権限は必要ありませんが、インポートする必要があるとだけ言いました。)umask(2)umask(2)umask 0022writewrite

安全でないプログラムまたは構成の潜在的な結果を制限するために、システム上の各サービスに必要な最小限のアクセス許可を付与する、最も簡単で最小特権の原則を尊重するソリューションを選択するようにしてください。

于 2012-04-08T23:11:02.907 に答える