• ベストアンサー

LinuxユーザーとMySQLユーザの関係

VPSで色々とためしてみているのですが、どうもユーザーとか権限とかよく分かりません。 「Linux自体のユーザー」と「MySQLのユーザー」との間には何か関係はあるのでしょうか? うまく言えませんが、例えば「MySQLのユーザー」は「Linux自体のユーザー」になってなければならない---なんてことです

  • MySQL
  • 回答数8
  • ありがとう数7

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.7

>結局「MySQLのユーザー」は自動的に「Linuxのユーザー」になっているということですか。 うまく伝わらないのがもどかしいですが 仮にlinuxのユーザーがaaa,bbb,cccとありその他rootがいるとします またmysqlのユーザーがaaa,xxx,yyyとありその他rootがいるとします (1)linuxのユーザーはmysqlのユーザーと全く別物 linuxにあるbbb,cccはmysqlのユーザーとしては存在しません またmysqlにあるxxx,yyyはlinuxのユーザーとして存在しません たまたまaaaという同じ名前がある場合もあるし、rootのように 管理者を明示するようなある程度定型なユーザーも存在します。 (2)linuxに存在しないユーザーでもmysqlにログインできる かりにaaaさんがxxxでmysqlにログインすることはできるし 同様にaaaさんがrootとしてログインすることもできます もちろんaaaさんがaaaとしてログインすることもできます とうぜんlinux上のrootが、yyyという一般ユーザーでログインすることもできます 繰り返しになりますがlinuxのユーザーはmysqlにとって直接意味はありません。 (3)プログラムは特定のlinuxユーザー権限で動いている mysqld(サーバー)は起動時のオプションの指定で 特定の権限で動くことになります。 もっとつっこんで言えばすべてのlinuxのプログラムは「誰か」の権限で 動いています。 理論上mysqldをlinuxのroot権限で動作させることは可能ですが、 セキュリティ上の問題で万が一mysqldがセキュリティホールを利用して乗っ取られた ときに、root権限で動いていればlinuxシステムに対してroot権限をもつことができ システム全体が乗っ取られる危険があります。 したがってmysqldは「mysql」という特別なユーザー(この場合の特別とは 特別に権限を制限された・・・という意味に近い)によって実行されるわけです (4)サーバーの実行権限者がlinuxファイルシステムへの実行権限者になる 仮に自分がlinuxのrootで、rootとしてmysqlにログインしたとしても outfileする際に発揮できるのはサーバーが実行されている「mysql」という (限定された)ユーザーの権限でしかありません。 mysqlにログインしているのは「クライアント」としてログインしているにすぎず mysqldは常に「自分はmysql権限でしかうごかないよ」と認識しているからです 結論としてselect * from テーブル into outfile "/tmp/test.txt"; でファイル出力する場合、そのファイルの所有者はmysqlでしかなく ls -la /tmp/test.txtとすると、mysql所有であることが確認できます 私の説明の仕方もわるく、うまく理解してもらえないのは申し訳ないですが 一度linuxの入門書から読み始めて最低限linuxがどうやって動いているか 学習されることをお勧めします

tasketeqq1
質問者

補足

「mysql」というのは「MySQL」インストール時に作られた「mysqld」を動作させる権限を持ったLinuxの1ユーザー。 「MySQLのユーザー」とは「mysqlクライアント」にログインする権限を持った「MySQL内のユーザー」ということですかね。 チョッと分かったような気が、、、

その他の回答 (7)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.8

たぶん認識はあってきていると思います ちなみにこの質問はこのまま続くのでしょうか?

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.6

>勉強中なので全てrootで実行してるんです。 常識的にrootでの作業はやめた方がいいですが、 別に自分がrootだろうがなんだろうが、まっとうにインストールしていれば mysqldはmysql権限で動いているはずです。 >psでやってみたら確かにmysqlが見受けられました。 >mysqlの権限はどうやって調べたらいいんでしょうか? だからtopコマンドだって・・・ psだったら # ps axguw |grep mysqld などで確認してみれば行の先頭が実行ユーザーです。 >MySQLからLinux側を操作しようとすると必ずユーザーmysqlなんですか? 原則アプリを実行しているユーザーがlinux側のユーザーになります。 なのでmysqldがmysqlで実行されている限り、linuxへの書き込みは mysqlで実行されるはずです。 /tmpにファイルが落ちているなら、 # ls -la /tmp でファイルのパーミッションを確認すればよいでしょう。 いずれにしてもmysqlがlinuxのroot権限で動かすことはほぼないので 覚える必要はないです。 (前述したとおりmysqlにrootとしてログインするのとは話の次元が違います)

tasketeqq1
質問者

お礼

select Host, User, Password from mysql.user;で見てもユーザーとしてmysqlが表示されないのはなんででしょうか。

tasketeqq1
質問者

補足

すみません不勉強なもので、怒らないでください。 なんとなく分かってきました。 結局「MySQLのユーザー」は自動的に「Linuxのユーザー」になっているということですか。 /etc/passwdに書かれているものね。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

>「mysql」というユーザーがあるんですか? 手っ取り早くはtopコマンドで確認してみてください (psでもok) mysqldコマンドがユーザーmysql権限で動いていることがわかります OSやインストールの仕方によっては別ユーザーが実行している可能性もありますが きょうびデーモンをrootが実行することはまれでしょう。 デーモンの実行はrootの乗っ取りを防止するために 専用のユーザーで動作することが一般的です

tasketeqq1
質問者

補足

勉強中なので全てrootで実行してるんです。 psでやってみたら確かにmysqlが見受けられました。 mysqlの権限はどうやって調べたらいいんでしょうか? MySQLからLinux側を操作しようとすると必ずユーザーmysqlなんですか? LinuxもMySQLも経験が浅いもので戸惑うことばかりです。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

>outfileを作ることはできないから、別のプログラムやアプリケーションで作れ 以下3つが一般的ですね (1)書けるところに書く ユーザーmysqlが書き込めるところに書く、よくあるのは/tmpに出力し、 必要があればシステム側のユーザーが/tmpから任意のフォルダにコピー・移動する (2)プログラムから得る phpやperlなどでSQLを発行して結果を得る、プログラムで得た結果はそのプログラムが 書き込めるフォルダがあるのでそこに書きだす (3)アプリから得る phpMyAdminなどで実行し、結果を表示する。必要ならファイルとしてダウンロードする。 またはODBC的なアプローチで、エクセルやアクセスで結果をえる

tasketeqq1
質問者

補足

/tmp/testfile.txtに出力するようにしたらできました。 (2)(3)については以前からやってます。 「mysql」というユーザーがあるんですか?

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>outfileを作る権限がない 考え方を整理した方がいいです。 (1)mysqlのデーモンはユーザー「mysql」権限で実行されています (2)outfileするのはmysqlの実行ユーザーなのでmysqlがlinuxのファイルI/Oの 権限がなければ書き出しができません (3)その他にmysql自体にユーザー管理の考え方があり、mysqlにクライアントとして ログインする際にユーザーを指定する。 仮にlinuxのrootがmysqlの一般ユーザーでログインすることもできるし、 linuxの一般ユーザーがmysqlのrootでログインすることもできる。 (4)mysqlのスーパーユーザー(おもにroot)が全権限を持ち、接続元やテーブルごとに 細かくユーザー設定ができます (5)例外的にセーフモードでmysqlをlinuxのrootで動かすことがあります。 結論 →linuxのrootとmysqlのrootは別物、その他たまたま同じ名前であっても linuxのユーザーとmysqlのユーザーは別物。 →outfileするケースはあまりなく、なにかプログラムやアプリケーションで 結果をえればよい

tasketeqq1
質問者

補足

つまり「outfileを作ることはできないから、別のプログラムやアプリケーションで作れ」ということでしょうか? PCのコマンドプロンプトから「PCにあるMySQL」に対してはできたんですが....ダメですかねぇ

  • naoiz
  • ベストアンサー率40% (59/144)
回答No.2

Linuxのディストリビューションによって関連するように設定している場合があるかもしれませんが、基本的に両者は関係ありません。それぞれ別個にアカウントを作成する必要がありますし、例えばMySQLとLinuxに共にtestuserというアカウントがあったとしても両者は完全にベツモノです。

tasketeqq1
質問者

補足

ありがとうございます。 別個なんですね。 実は、「select * from testtable into outfile "/root/testfile.txt" fields terminated by "," lines terminated by "\r\n";」などとエクスポートしようとしたら、「outfileを作る権限がない」というような意味のエラーがでるんです。Linuxでリモートsshからrootでログインし、rootでMySQLに入ってます。「root」ユーザーがどちらにもあります。 どうしてなんでしょうか?

  • notnot
  • ベストアンサー率47% (4845/10255)
回答No.1

ユーザー名を明示指定しないで mysql コマンドを実行すると、Linuxユーザ名が mysql ユーザ名として扱われます。 毎回-uで明示的にユーザ名を指定してmysqlコマンドを実行することにすれば、mysqlユーザ名とLinuxユーザ名は無関係です。

tasketeqq1
質問者

補足

ありがとうございます。 無関係なんですね、なんか関係がありそうななさそうなモヤモヤしてました。 別の方の補足コメントに書かせていただいたことが分からないんです。

関連するQ&A

  • MySQLでのLinuxユーザの作成

    Linux上でMySQLを構築する際useraddコマンドでmysqlユーザを作成することは何かメリットがあるでしょうか? Apache httpdの構築の本を読むと実行ユーザ用にapacheユーザを作成しているのですが、MySQLの本では実行ユーザはmysqlを指定しているのに、OS上でユーザ作成は行っていません。 存在しないユーザであっても、実行ユーザとして指定できるのであれば、MySQLではmysqlユーザを作成することに何かメリットがあるでしょうか? また、反対にApache httpdでは何故apacheユーザ(とグループ)を作成しているのでしょうか? (試していませんが、Apache httpdでは存在しないユーザでは実行できないのでしょうか?) よろしくお願いいたします。

  • MYSQL ユーザ作成について

    MYSQLのユーザ作成についてご質問させて頂きます。 管理者権限のあるユーザにてmysqlデータベースに接続し、 /usr/bin/mysql mysql -u admin -D mysql -p ユーザを作成しました。 GRANT SELECT,INSERT,UPDATE,DELETE,CREATE ON DB名.* TO ユーザ名@localhost IDENTIFIED BY 'パスワード'; さまざまなサイトに記載されているとおり FLUSH PRIVILEGES; も行い、ユーザ一覧を確認してみると select * from mysql.user \G 権限が付与されていません。 Select_priv: N と表示されています。 エラー文が出てくるわけではないのでエラーではないと思いますが なぜなのでしょうか? ご教示ください。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • MySQLの起動ユーザ

    よろしくお願いします。 OS:Redhat Enterprise Linux 6 DB:MySQL5.6 OSでrootで作業をしており、MySQLをrpmパッケージからインストールすると、 実行ユーザがrootになってしまうことを危惧しています。 サービスをrootで起動することはセキュリティ上 望ましくない、と聞きました。 別途「mysql」というユーザを作成しました。 このmysqlユーザをサービスの起動ユーザとしたいのですが、 どういった手順でそれを実施すれば良いでしょうか?。

    • ベストアンサー
    • MySQL
  • MySQLのバイナリデータについて

    Linux版MySQLで稼働していたデータベースをWindows版で稼働させたいと思っています。 データベースはinnodbです。 my.iniをWindowsの環境に合わせて書き換え、MySQLは起動したのですがテーブルが見れません。 mysqlデータベースは参照でき、ユーザー権限等も書き換えられるのですが、どうやらinnodbが見れないようです。 そもそもLinux版のinnodbはWindows版MySQLでは使用できないのでしょうか?

    • ベストアンサー
    • MySQL
  • mysqlのユーザパスワードについて

    mysqlのユーザパスワードについて こんばんわ。mysql初心者です。 現在、サーバ(Linux Fedora11)でyumコマンドからmysql(Server version: 5.1.45 Source distribution) をダウンロードしてインストールしています。 新しいユーザーを作って接続を試みたのですが出来ません。 原因を調査した結果、パスワードが設定出来ていないようです。 一連の作業を例として下記の通りです。 例)------------------------------------------------------------------------------- [root@fedora user]# mysql -u root mysql> grant all privileges on *.* to user@"%" identified by 'user' with grant option; mysql> grant all privileges on *.* to user@localhost identified by 'user' with grant option; mysql> select user,host,password from mysql.user; +----+-----------------+-----------------+ | user | host           | password        | +----+-----------------+-----------------+ | root | localhost        |             | | root | fedora.fedorasrv.com |             | | root | 127.0.0.1        |             | | user | localhost        | 1a486e7929011a28 | | user | #             | 1a486e7929011a28 | +----+-----------------+-----------------+ mysql> exit; [root@fedora user]# mysql -u user -p 1a486e7929011a28 Enter password: ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: NO) [root@fedora user]# mysql -u user ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: NO) [root@fedora user]# mysql -u user -p user Enter password: ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: NO) ---------------------------------------------------------------------------------- userユーザのパスワードが保護(?)なのか設定した内容と違います。 保護されたパスワードで打ってもノーパスワードで打っても設定したパスワードでも接続出来ません。 ちなみに他のユーザで作成しても保護されたパスワードです。 どのようにしたら設定した通りのパスワードが作成されるかご教授願います。

    • ベストアンサー
    • MySQL
  • mysqlのユーザパスワードについて

    mysqlのユーザパスワードについて こんばんわ。mysql初心者です。 現在、サーバ(Linux Fedora11)でyumコマンドからmysql(Server version: 5.1.45 Source distribution)をダウンロードしてインストールしています。 新しいユーザーを作って接続を試みたのですが出来ません。 原因を調査した結果、パスワードが設定出来ていないようです。 一連の作業を例として下記の通りです。 例)------------------------------------------------------------------------------- [root@fedora user]# mysql -u root mysql> grant all privileges on *.* to user@"%" identified by 'user' with grant option; mysql> grant all privileges on *.* to user@localhost identified by 'user' with grant option; mysql> select user,host,password from mysql.user; +----+-----------------+-----------------+ | user | host           | password        | +----+-----------------+-----------------+ | root | localhost        |             | | root | fedora.fedorasrv.com |             | | root | 127.0.0.1        |             | | user | localhost        | 1a486e7929011a28 | | user | #             | 1a486e7929011a28 | +----+-----------------+-----------------+ mysql> exit; [root@fedora user]# mysql -u user -p 1a486e7929011a28 Enter password: ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: NO) [root@fedora user]# mysql -u user ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: NO) [root@fedora user]# mysql -u user -p user Enter password: ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: NO) ---------------------------------------------------------------------------------- userユーザのパスワードが保護(?)なのか設定した内容と違います。 保護されたパスワードで打ってもノーパスワードで打っても設定したパスワードでも接続出来ません。 ちなみに他のユーザで作成しても保護されたパスワードです。 どのようにしたら設定した通りのパスワードが作成されるかご教授願います。

    • ベストアンサー
    • MySQL
  • MySQLのユーザー追加について

    こんにちは。 セキュリティ対策のために、rootで操作するのではなく、ユーザーを作成して権限を与えたいと思います。 その際に、 1、rootと同じ権限のユーザーを作り、rootを削除 2、特定のデータベースの、作成、削除などの権限を持つユーザーの作成 などが有効だとどこかで見た記憶があるのですが、内容はあまり理解できていません。 1、だとroot自体が狙われるから危険。 2、はアプリケーション上(PHPなど)でデータベースへのユーザー名やパスワードが漏れる可能性があり、危険。 という理解なのですが、 これらについて詳しく記載されているサイトなどをご存知でしたら紹介くいただけるとうれしいです。 ちなみに、2、の具体的なやり方が良く分かっていません。。 phpmyadminのユーザー追加で、どこにチェックを入れればいいのやら。。 よろしくお願いします。

  • MySQLでの権限付与について

    MySQLでrootの使用をなるべく避けるため DB作成、ユーザ作成などは違うユーザを作って行いたいですが、 権限を与えることはrootでしかできないと聞きました。 本当にMySQL内でgrant権限を持つユーザを作成するのはできないでしょうか?

    • ベストアンサー
    • MySQL
  • MySQLのユーザー設定について

    よろしくお願いします。 環境は、 Win XP home MySQL バージョンは4.024です。 「PHP+MySQL Web制作ガイド」という本に沿って、勉強を始めたばかりです。 Mysqlをインストールし、rootユーザーのパスワード設定で、 mysql> UPDATE mysql.user SET Password=PASSWORD('12345')WHERE User ->='root' とコマンドプロンプトで入力するのですが、 ERROR 1044: Access denied for user; '@licalhost' to database 'mysql' とエラーが返されてしまいます。 何度もやってみましたが、同様です。 winMySQLAdminを起動させた際、パスワードの入力を求められた場合、 本に「管理ツール用の任意のパスワードを入力して先に進みます」とあったので、その通りにしたのですが、これは関係するのでしょうか? リファレンスhttp://dev.mysql.com/doc/mysql/ja/access-denied.htmlも見てみたのですが、さっぱりわからず困っています。 どうぞ、アドバイスをよろしくお願いします。

    • ベストアンサー
    • MySQL
  • Linux root権限を持つユーザの作成について

    どなたかご存知であれば教えてください。 Linux のsles10sp3にて、root権限を持つユーザーを以下で作成。 #useradd -o -u 0 -g 111 ~ 特に問題なく利用できていました。 しかし、Linuxのsles11sp3で同様にroot権限を持つユーザーを作成したところ おかしな事象が発生するようになりました。 事象はroot権限を持つユーザーを仮にadminという名前で作成したとします。 そのadminでLinuxへログインしてidコマンドを実行すると  uid 0:root → uid 0:admin と表示されるようになり、ファイルのオーナーがrootだったものが一律adminで変わってしまうという事象が発生しました。 そのときは大いに焦りましたが約1時間放置するとなぜか元に戻ります。 suseのバージョンがあがってLinuxのユーザー管理で仕様が変更されておりますでしょうか? どなたかご存知でしたらご教授頂きたく、よろしくお願い致します。