質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

1134閲覧

PHPでSQLにアクセスするときのユーザー名とパスワードを、ユーザーに入力させたい

bellevue

総合スコア16

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/08/24 05:06

編集2022/01/12 10:55

前提・実現したいこと

SQLのデータベースにアクセスするためのコードとして、以下のようなものを使って開発してきました。

php

1$db_user = "user"; // ユーザー名 2$db_pass = "userpw"; // パスワード

開発中は、つねにこれを利用してきたのですが、実際の使用中は、ユーザーが、
ユーザー名と、パスワードとを入力して利用したいと思っています。

ユーザーが、システムを利用し始めるとき、
ユーザー名と、パスワードを入力することを要求し、
システム利用中は、何度も入力する必要は無いようにしたいのです。

お聞きしたいのは、ユーザーが入力したユーザ名とパスワードを、
$db_user,$db_passの変数に引き渡す方法です。
かつ、dbにアクセスする度に要求されるのは困るということです。
それだけです。

php

1<?php 2 function db_connect() { 3 4 $db_user = "user"; // ユーザー名 5 $db_pass = "userpw"; // パスワード 6 $db_host = "localhost"; // ホスト名 7 $db_name = "userdb"; // データベース名 8 $db_type = "mysql"; // データベースの種類 9 10 $dsn = "$db_type:host=$db_host;dbname=$db_name;charset=utf8"; 11 try { 12 $pdo = new PDO($dsn, $db_user, $db_pass); 13 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 14 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 15 } catch (PDOException $Exception) { 16 die('エラー :' . $Exception->getMessage()); 17 } 18 return $pdo; 19 } 20?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ユーザーごとにSQL接続用の設定を持つなんて、完全に利用方法を間違っています。

理由1:
ユーザーが増えるごとに、SQLの設定を変更しなければならない。
GRANT文を発行しなければならない。

理由2:
SQL接続用のパスワードをSQL以外に保存しなければならない。
MySQL接続のパスワードを保存するための別の仕組みが必要。例えばPostgresだったり、SQLite など。

投稿2019/08/24 05:14

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bellevue

2019/08/24 05:27

そういうことをしたくないというのが質問です。よろしくお願いします。
退会済みユーザー

退会済みユーザー

2019/08/24 05:29 編集

どこをどう読めばあなたの質問からその意図を読み取れるのでしょうか?
bellevue

2019/08/24 05:39

何度もご記入ありがとうございます。質問の仕方を変えてみました。引き続き、ご教授いただけると幸いです。
退会済みユーザー

退会済みユーザー

2019/08/24 05:41

「ユーザーごとにSQL接続用の設定を持つなんて、完全に利用方法を間違っています。」 と言うのが回答です。
退会済みユーザー

退会済みユーザー

2019/08/24 05:54

MySQLの接続パスワードと「サイトのユーザーのログインパスワード情報」は全くの別物です。
guest

0

公開するものかどうかは別としてセキュリティ的にNGです。
悪意あるユーザーは通るまで何度も入力します。
もちろん例え入力回数を何かしらで制限したとして抜け道は幾らでもあったりします。

通常は、ユーザーテーブルを別途つくりログインしたらそのログインIDで利用するテーブルのレコードを分ければいいだけです。
既に回答にある通り、データベースパスワードを他で保存しなければならない仕組みはおかしいです。どうやって紐付けしますか?ログインテーブル?であればDBを分けるのではなくテーブル内のレコードで分けるべきです。

投稿2019/08/24 05:22

編集2019/08/24 05:29
m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bellevue

2019/08/24 05:29

ありがとうございます。そのユーザーテーブルを・・分ければいいだけですのあたりの知識がないものですから。ちなみに、データベースは社内設置です。
m.ts10806

2019/08/24 05:31

少し調整しましたがテーブル内のデータです。 ログインIDを各レコードにつけておいて絞りこめばいいだけですよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問