dポイントプレゼントキャンペーン実施中!

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

A 回答 (8件)

>結局「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がどうやって動いているか
学習されることをお勧めします

この回答への補足

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

補足日時:2014/11/06 07:13
    • good
    • 1

たぶん認識はあってきていると思います


ちなみにこの質問はこのまま続くのでしょうか?
    • good
    • 0

>勉強中なので全て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としてログインするのとは話の次元が違います)

この回答への補足

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

補足日時:2014/11/05 08:21
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/11/05 08:35

>「mysql」というユーザーがあるんですか?



手っ取り早くはtopコマンドで確認してみてください
(psでもok)

mysqldコマンドがユーザーmysql権限で動いていることがわかります
OSやインストールの仕方によっては別ユーザーが実行している可能性もありますが
きょうびデーモンをrootが実行することはまれでしょう。

デーモンの実行はrootの乗っ取りを防止するために
専用のユーザーで動作することが一般的です

この回答への補足

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

補足日時:2014/11/04 19:15
    • good
    • 0

>outfileを作ることはできないから、別のプログラムやアプリケーションで作れ



以下3つが一般的ですね

(1)書けるところに書く
ユーザーmysqlが書き込めるところに書く、よくあるのは/tmpに出力し、
必要があればシステム側のユーザーが/tmpから任意のフォルダにコピー・移動する

(2)プログラムから得る
phpやperlなどでSQLを発行して結果を得る、プログラムで得た結果はそのプログラムが
書き込めるフォルダがあるのでそこに書きだす

(3)アプリから得る
phpMyAdminなどで実行し、結果を表示する。必要ならファイルとしてダウンロードする。
またはODBC的なアプローチで、エクセルやアクセスで結果をえる

この回答への補足

/tmp/testfile.txtに出力するようにしたらできました。
(2)(3)については以前からやってます。

「mysql」というユーザーがあるんですか?

補足日時:2014/11/04 11:44
    • good
    • 0

>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するケースはあまりなく、なにかプログラムやアプリケーションで
結果をえればよい

この回答への補足

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

補足日時:2014/11/04 10:32
    • good
    • 0

Linuxのディストリビューションによって関連するように設定している場合があるかもしれませんが、基本的に両者は関係ありません。

それぞれ別個にアカウントを作成する必要がありますし、例えばMySQLとLinuxに共にtestuserというアカウントがあったとしても両者は完全にベツモノです。

この回答への補足

ありがとうございます。
別個なんですね。

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

補足日時:2014/11/04 08:02
    • good
    • 0

ユーザー名を明示指定しないで mysql コマンドを実行すると、Linuxユーザ名が mysql ユーザ名として扱われます。



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

この回答への補足

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

補足日時:2014/11/04 08:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す