![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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がどうやって動いているか
学習されることをお勧めします
この回答への補足
「mysql」というのは「MySQL」インストール時に作られた「mysqld」を動作させる権限を持ったLinuxの1ユーザー。
「MySQLのユーザー」とは「mysqlクライアント」にログインする権限を持った「MySQL内のユーザー」ということですかね。
チョッと分かったような気が、、、
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としてログインするのとは話の次元が違います)
この回答への補足
すみません不勉強なもので、怒らないでください。
なんとなく分かってきました。
結局「MySQLのユーザー」は自動的に「Linuxのユーザー」になっているということですか。
/etc/passwdに書かれているものね。
select Host, User, Password from mysql.user;で見てもユーザーとしてmysqlが表示されないのはなんででしょうか。
No.5
- 回答日時:
>「mysql」というユーザーがあるんですか?
手っ取り早くはtopコマンドで確認してみてください
(psでもok)
mysqldコマンドがユーザーmysql権限で動いていることがわかります
OSやインストールの仕方によっては別ユーザーが実行している可能性もありますが
きょうびデーモンをrootが実行することはまれでしょう。
デーモンの実行はrootの乗っ取りを防止するために
専用のユーザーで動作することが一般的です
この回答への補足
勉強中なので全てrootで実行してるんです。
psでやってみたら確かにmysqlが見受けられました。
mysqlの権限はどうやって調べたらいいんでしょうか?
MySQLからLinux側を操作しようとすると必ずユーザーmysqlなんですか?
LinuxもMySQLも経験が浅いもので戸惑うことばかりです。
No.4
- 回答日時:
>outfileを作ることはできないから、別のプログラムやアプリケーションで作れ
以下3つが一般的ですね
(1)書けるところに書く
ユーザーmysqlが書き込めるところに書く、よくあるのは/tmpに出力し、
必要があればシステム側のユーザーが/tmpから任意のフォルダにコピー・移動する
(2)プログラムから得る
phpやperlなどでSQLを発行して結果を得る、プログラムで得た結果はそのプログラムが
書き込めるフォルダがあるのでそこに書きだす
(3)アプリから得る
phpMyAdminなどで実行し、結果を表示する。必要ならファイルとしてダウンロードする。
またはODBC的なアプローチで、エクセルやアクセスで結果をえる
この回答への補足
/tmp/testfile.txtに出力するようにしたらできました。
(2)(3)については以前からやってます。
「mysql」というユーザーがあるんですか?
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するケースはあまりなく、なにかプログラムやアプリケーションで
結果をえればよい
この回答への補足
つまり「outfileを作ることはできないから、別のプログラムやアプリケーションで作れ」ということでしょうか?
PCのコマンドプロンプトから「PCにあるMySQL」に対してはできたんですが....ダメですかねぇ
No.2
- 回答日時:
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」ユーザーがどちらにもあります。
どうしてなんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux linuxサーバーのキャッシュをクリアするコマンドを実行したい。 5 2023/01/24 14:52
- MySQL 「掲示板のログイン画面」はPHP~MySQLに「データベース認証のシステム」方式です。 1 2022/09/27 05:00
- オープンソース AWSドメイン名でApacheテスト・ページを表示させる方法を教えて下さい。 1 2023/04/26 15:59
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- その他(ブラウザ) 自分のデフォルトゲートウェイをアドレスバーに入力し、Enterキーを押します。(一般的なデフォルトゲ 4 2022/05/30 22:43
- SQL Server SQLのクエリの書き方 1 2022/03/29 23:06
- X(旧Twitter) 私、間違えて別の人のユーザー名と、自分のパスワード入れてしまいました。二回ほど。 ユーザー名が私のユ 1 2023/05/26 12:25
- その他(ブラウザ) ・再投稿です 自分のデフォルトゲートウェイをアドレスバーに入力し、Enterキーを押します。(一般的 1 2022/05/30 23:16
- 教えて!goo ブロックしてもユーザー名を変えて出直して来るユーザーさんは、新着質問欄に載るはずです。 以前から、こ 4 2023/04/02 06:09
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Oracleで言う所のset head offなど
-
接続ができません
-
SQL Server のキャラクターセッ...
-
SQLのVARCHARとVARCHAR2の違い
-
PHPのサンプルコードが意図した...
-
パスワード入力を省略したい
-
postgreSQLのデータ型
-
ERROR 1045 (28000) (using pas...
-
Float型の時の計算結果がおかしい
-
経過時間(hhmmdd)をDATE型には...
-
MySQLの型のサイズ指定で速度は...
-
like句を使って日本語を検索す...
-
ODP.NETのバージョン確認
-
副問合せにLIKE文を使う方法は...
-
php・Mysql Like文で日本語が使...
-
MYSQLのデータに「;」を入力
-
MySQLカラム名は日本語と英数字...
-
データベースについて
-
MySQL コマンド上の文字化けを...
-
さくらのレンタルサーバで文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
参考書に従って入力したつもり...
-
SSHでのmysqldumpができません
-
MySQL の安全な再起動とコネク...
-
ロードバランサからmysqlの生存...
-
LinuxのMySQLのrootパスワード...
-
4.0.14から4.0.26にDBを移行す...
-
Macでmy.cnfをコピー出来ない。
-
Oracleで言う所のset head offなど
-
コマンドプロンプトに表示させ...
-
LinuxユーザーとMySQLユーザの関係
-
create database
-
接続ができません
-
SQLのVARCHARとVARCHAR2の違い
-
副問合せにLIKE文を使う方法は...
-
MySQLカラム名は日本語と英数字...
-
ODP.NETのバージョン確認
-
旧filemakerで和暦(令和など)...
-
VBAで変数内に保持された二次配...
-
プライマリーキーの昇順でソー...
-
ERROR 1045 (28000) (using pas...
おすすめ情報