web-dev-qa-db-ja.com

データベース資格情報を使用したウェブサイトログイン

ユーザーごとに、データベースのユーザー名を使用してWebサイトにログインすることは安全ですか?それは悪い習慣ですか?問題は何ですか?

アイデアは、データベースレベルでユーザーと権限を作成することです。

編集:私のウェブサイトからアクセスするすべてのユーザーは、特定のテーブルでSELECT権限をINSERT、DELETE、UPDATEすることになります。

コードレベルでは、より高いアクセス許可レベル(adminなど)を持つ特定のユーザーへのログインをブロックします。

私の会社のスタッフだけが私のウェブサイトにアクセスします。したがって、Webサイトを介したアカウント管理や、新しいユーザーの作成は行われません。私はそれをローカルで行います。

EDIT2:私はPostgreSQLを使用し、ユーザーはインターネット経由で(データベースではなく)サイトにアクセスできるはずです。

私がこれを尋ねる理由の1つは、まさにそれを実行する同様の商用デスクトップアプリケーションを見たからです。つまり、アプリケーション内にデータベースのユーザー名でログインします。この種のソフトウェアはローカルネットワーク内で実行することを目的としていますが、外部で動作するように簡単に構成できます。

6
ivanc

編集:私はこの回答で、必ずしも正しくない多くの仮定を行いました。問題のDBがPostgresであることがわかりました。私の答えは、SQL Serverに合わせて調整されたもので、バージョン2016までは行レベルのセキュリティがありませんでした。情報目的でここに回答を残します。

あなたが提案していることは、多くの理由で、確かにベストプラクティスではありません。それはあなたができないすることを意味するわけではありませんが、そうしない場合は、これらのすべての点を喜んで認めなければなりません:

モデルを使用すると、すべてのユーザーがWebサイトをまったく使用せずにデータベースに直接アクセスできます。 (編集:これは、ローカルイントラネットにいて、ユーザーがWebサイト外の別のツールを使用してDBに直接アクセスできることを前提としています)。

このため:

  1. どのユーザーも、自分の情報だけでなく、すべてのユーザーの情報を追加/編集/表示/削除できます。 (注:DBが行レベルのセキュリティをサポートし、使用している場合、これは必ずしも当てはまりません。)
  2. 1人のユーザーの資格情報が侵害された場合、すべてのデータが危険にさらされる可能性があります。 (注:DBが行レベルのセキュリティをサポートし、使用している場合、これは必ずしも当てはまりません。)
  3. DBに直接アクセスするユーザーは、意図しないことを行うクエリを偶発的に実行する可能性があります。また、無意識のうちにDBをロックして、他のユーザーが使用できなくなる可能性もあります。

これを行わない理由は他にもありますが、代わりに「規範」について話しましょう。通常は、Webサイトからユーザーを管理し、必要な最小限の権限セットを持つ単一のユーザーを使用して、WebサイトにDBへのアクセスを許可します。 DBパスワードが侵害された疑いがある場合は、その1つのパスワードを変更し、Webサイトに新しいパスワードを通知することができます(通常、Webアクセスできない何らかの暗号化ファイルで)。これにより、Webサイトのコードでユーザーのアクセスを制御するだけで、さまざまなレベルの権限をさまざまなユーザーに簡単に提供できます。たとえば、必要に応じて、特定のユーザーが特定のテーブルの特定の列のみを更新できるようにすることもできます。

幸いなことに、ほとんどすべての一般的なWebプラットフォームでユーザーとロールを管理する、すぐに使える無料のソリューションが数多くあります。私はウェブサイトを介してデータベースに接続するための標準から離れて冒険する正当な理由を本当に考えることができません。

編集:Postgresのベストプラクティスがこの回答での私の提案とは異なる場合があるかもしれませんが、DBへの直接アクセスを提供することはまだ確信がありませんbetter =私の提案より。 Postgresについてもっと知らなくても、私はこのモデルを好むでしょう。しかし、それは単にこれが私が慣れていることだからかもしれません。

2
TTT