mysql(7)
5295 ワード
mysqlコマンドライン
· shell> mysql -ptest · shell> mysql -p test
最初のコマンドはmysqlにパスワードtestを使用させますが、デフォルトのデータベースは指定されていません.2番目のコマンドはmysqlにパスワードの入力を要求させ、testをデフォルトデータベースとして使用します.
mysqlでたまに役立つもう一つのオプションは、SQL文をサーバに渡すための-eまたは--executeオプションです.文は引用符で囲まれていなければなりません(単一引用符または二重引用符).(ただし、クエリーで値を引き起こす場合は、クエリーに二重引用符を使用し、クエリーで参照される値には単一引用符を使用します).このオプションを使用すると、文が実行され、mysqlはすぐにコマンド・ハウジングを終了します.たとえば、次のコマンドでユーザー・アカウントのリストを取得できます.
MySQLアクセスシステム
権限システムの役割
MySQL権限システムの主な機能は、特定のホストに接続されているユーザーを確認し、データベース上のSELECT、INSERT、UPDATE、DELETE権限を付与することです.追加の機能には、匿名のユーザーと、LOAD DATA INFILEなどのMySQL固有の機能に対して操作を許可および管理する能力が含まれます.
権限システムの動作原理
MySQL権限システムは、すべてのユーザーが許可されたことのみを実行することを保証します.MySQLサーバーに接続する場合、あなたのアイデンティティは、そこから接続されているホストと指定されたユーザー名によって決まります.接続後に要求を出した後、システムはあなたのアイデンティティと何をしたいかによって権限を与えます.MySQLは、アイデンティティの中であなたのホスト名とユーザー名を考慮します.ほとんどないためです理由:指定されたユーザーがインターネット上で同じ人に属していると仮定します.たとえば、office.comから接続されているユーザーjoeは、必ずしもelsewhere.comから接続されているjoeと同じ人ではありません.MySQLでは、異なるホスト上で偶然同じ名前のユーザーを区別することで処理できます.joeのoffice.comからの接続に権限セットを付与し、joeのelsewhere.cからomの接続には、異なる権限セットが付与されます.
MySQLアクセス制御には、2つのフェーズがあります.フェーズ1:サーバが接続を許可するかどうかを確認します.フェーズ2:接続できると仮定し、サーバが発行した各リクエストを確認します.それを実装するのに十分な権限があるかどうかを確認します.たとえば、データベース・テーブルから選択した場合(select)行またはデータベースからテーブルを削除し、サーバはテーブルにSELECT権限があるか、データベースにDROP権限があるかを決定します.
データベースのアクセス権の表示
-pまたは--passwordオプションを使用しているがパスワード値を指定していない場合、クライアント・プログラムはパスワードの入力を要求します.パスワードを入力するときはパスワードが表示されません.これはコマンド・ラインにパスワードを入力するよりもずっと安全です.システム上の任意のユーザーはコマンドps auxwwでコマンド・ラインにパスワードを指定できます.接続パラメータを指定していない場合、MySQLクライアント・プログラムはデフォルト値を使用します.デフォルトホスト名はlocalhostです.デフォルトユーザー名はWindowsでODBC、UnixではUnixログイン名です.-pがない場合はパスワードは提供されません.これにより、Unixユーザーjoeに対して、次のコマンドは等価です.
MySQLサーバーに接続しようとすると、サーバーはあなたのアイデンティティに基づいて、正しいパスワードを入力してアイデンティティを検証することで接続を受け入れるか拒否することができます.そうでなければ、サーバーはあなたのアクセスを完全に拒否します.そうでなければ、サーバーは接続を受け入れて、段階2に入って要求を待っています.あなたのアイデンティティは2つの情報に基づいています.あなたはそのホストからMySQLユーザーに接続します.名前
アイデンティティーチェックは3つのuserテーブル(Host,User,Password)を使用します.範囲列が実行されます.サーバーは、ユーザー表に記録されているHost列とUser列がクライアントホスト名とユーザー名に一致し、正しいパスワードが指定されている場合にのみ接続を受け入れます.ユーザー表Host値の指定方法:Host値はホスト名またはIP番号、または「localhost」はネイティブを示します.ホスト値にワイルドカード文字「%」と「」を使用できます..Host値'%'は任意のホスト名に一致し、空のHost値は'%'に等しい.これらの意味はLIKEオペレータのモードマッチング操作と同じです.たとえば、'%'のHost値はすべてのホスト名に一致し、'%.mysql.com'はmysql.comドメインのすべてのホストに一致します.
・IP番号として指定されたHost値について、ネットワーク番号を評価するために何ビットのアドレスビットを使用するかを示すネットワークマスクを指定できます.たとえば、・mysql>GRANT ALL PRIVILEGES ON db.*->->TO david@'192.58.197.0/255.255.255.00';davidが任意のクライアントからIP番号client_ipで接続できるようにします.以下の条件は真です:client_ip&netmask=host_ip That is,for theGRANT statement just shown:client_ip&255.255.255.00=192.58.197.0この条件を満たし、MySQLサーバに接続できるIP番号の範囲は192.58.197.0から192.58.197.255です.・注釈:ネットワークマスクは、8、16、24または32ビットのアドレスを使用することをサーバに伝えるためにのみ使用されます.たとえば、192.0.0/255.0.0(192 Aクラスネットワークの任意のアドレス)・192.168.0.0/255.255.0.0(192.168 Aクラスネットワークの任意のアドレス)・192.168.1.0/255.255.255.255.0(192.168.1 Cクラスネットワークの任意のアドレス)・192.168.1.1(このIPのみ)以下のネットワークマスク(28ビット)は無効です:192.168.0.1/255.255.255.240・dbテーブルレコードの空のHost値は、クライアント名に一致するhostテーブルの行に権限を結合して使用する必要があることを示します.AND(結合)によって、または(連合)ではなくAND(結合)によって操作によって権限が結合されます.5.7.6節、「アクセス制御、フェーズ2:確認要求」からhostテーブルの詳細を検索できます.他のgrantテーブルの空のHost値は'%'と同じです.HostフィールドでIPワイルドカード値を使用できる以上('144.155.166.%'はサブネット上の各ホストに一致します).ああ、誰かがこの能力を探求しようとしている可能性があります.ホスト名は144.155.166.somewhere.comです.このような企みを阻止するために、MySQLは数字と点から始まるホスト名のマッチングを許可しません.このように、1.2.foo.comのようなホスト名を使用すると、その名前は許可表のHost列に決して一致しません.IP番号がIP通に一致するのは1つだけです.ワイルドカードの値です.ワイルドカード文字はUser列では許可されませんが、空の値を指定できます.ユーザーは、ユーザーが実際に指定した名前ではなく、空のユーザー名と一致します.ユーザーは、ユーザーが空のユーザー名と一致する場合、クライアントが実際に指定した名前ではなく匿名のユーザーとみなされます.これは、接続中のさらなるアクセスチェックに空のユーザー名が使用されることを意味します.(すなわち、フェーズ2の間).Password列は空であってもよい.これはワイルドカードではなく、任意のパスワードに一致することを意味するものではない.これは、ユーザーがパスワードを指定して接続しなければならないことを意味する.userテーブルの空でないPassword値は、暗号化されたパスワードを意味する.MySQLは、誰にも見られない明文テキスト形式でパスワードを格納するのではなく、逆に接続しようとしているユーザーが提供したパスワードは暗号化される(PASWORD()関数)は、接続中に暗号化されたパスワードを使用してパスワードが正しいかどうかをチェックします.(暗号化されたパスワードは接続されていないで実現できます).MySQLの観点から、暗号化されたパスワードは実際のパスワードなので、他の人にアクセスさせるべきではありません!特に、mysqlデータベースのテーブルを管理されていないユーザーに絶対に読ませないでください!
mysqlパスワードの忘れと変更
パスワードを忘れた場合は、プロファイル/etc/my.confを変更して--skip-grant-tablesを追加してmysqldを再起動することでパスワードを変更できます.
· shell> mysql -ptest · shell> mysql -p test
最初のコマンドはmysqlにパスワードtestを使用させますが、デフォルトのデータベースは指定されていません.2番目のコマンドはmysqlにパスワードの入力を要求させ、testをデフォルトデータベースとして使用します.
mysqlでたまに役立つもう一つのオプションは、SQL文をサーバに渡すための-eまたは--executeオプションです.文は引用符で囲まれていなければなりません(単一引用符または二重引用符).(ただし、クエリーで値を引き起こす場合は、クエリーに二重引用符を使用し、クエリーで参照される値には単一引用符を使用します).このオプションを使用すると、文が実行され、mysqlはすぐにコマンド・ハウジングを終了します.たとえば、次のコマンドでユーザー・アカウントのリストを取得できます.
shell> mysql -u root -p -e "SELECT User, Host FROM User" mysql
Enter password: **********
+------+-----------+
| User | Host |
+------+-----------+
| | gigan |
| root | gigan |
| | localhost |
| jon | localhost |
| root | localhost |
+------+-----------+
shell>
mysqlデータベース名は独立したパラメータとして渡されることに注意してください.ただし、同じクエリはmysql-u root-p-e「SELECT User,Host FROM mysql.User」を使用してハウジングから実行されている可能性があります.MySQLアクセスシステム
権限システムの役割
MySQL権限システムの主な機能は、特定のホストに接続されているユーザーを確認し、データベース上のSELECT、INSERT、UPDATE、DELETE権限を付与することです.追加の機能には、匿名のユーザーと、LOAD DATA INFILEなどのMySQL固有の機能に対して操作を許可および管理する能力が含まれます.
権限システムの動作原理
MySQL権限システムは、すべてのユーザーが許可されたことのみを実行することを保証します.MySQLサーバーに接続する場合、あなたのアイデンティティは、そこから接続されているホストと指定されたユーザー名によって決まります.接続後に要求を出した後、システムはあなたのアイデンティティと何をしたいかによって権限を与えます.MySQLは、アイデンティティの中であなたのホスト名とユーザー名を考慮します.ほとんどないためです理由:指定されたユーザーがインターネット上で同じ人に属していると仮定します.たとえば、office.comから接続されているユーザーjoeは、必ずしもelsewhere.comから接続されているjoeと同じ人ではありません.MySQLでは、異なるホスト上で偶然同じ名前のユーザーを区別することで処理できます.joeのoffice.comからの接続に権限セットを付与し、joeのelsewhere.cからomの接続には、異なる権限セットが付与されます.
MySQLアクセス制御には、2つのフェーズがあります.フェーズ1:サーバが接続を許可するかどうかを確認します.フェーズ2:接続できると仮定し、サーバが発行した各リクエストを確認します.それを実装するのに十分な権限があるかどうかを確認します.たとえば、データベース・テーブルから選択した場合(select)行またはデータベースからテーブルを削除し、サーバはテーブルにSELECT権限があるか、データベースにDROP権限があるかを決定します.
データベースのアクセス権の表示
mysql> SHOW GRANTS FOR 'bob'@'pc84.example.com';
shell> MySQL -h host_name -u user_name -p your_pass
-h、-uおよび-pオプションは、host=host_name、--user=user_name、および--password=your_passという形式で使用することもできます.-pまたは--password=以降のパスワードの間にスペースはありません.-pまたは--passwordオプションを使用しているがパスワード値を指定していない場合、クライアント・プログラムはパスワードの入力を要求します.パスワードを入力するときはパスワードが表示されません.これはコマンド・ラインにパスワードを入力するよりもずっと安全です.システム上の任意のユーザーはコマンドps auxwwでコマンド・ラインにパスワードを指定できます.接続パラメータを指定していない場合、MySQLクライアント・プログラムはデフォルト値を使用します.デフォルトホスト名はlocalhostです.デフォルトユーザー名はWindowsでODBC、UnixではUnixログイン名です.-pがない場合はパスワードは提供されません.これにより、Unixユーザーjoeに対して、次のコマンドは等価です.
shell> MySQL** -h localhost -u joe**
shell> MySQL** -h localhost**
shell> MySQL** -u joe**
shell> MySQL
アクセス制御、フェーズ1:接続の確認MySQLサーバーに接続しようとすると、サーバーはあなたのアイデンティティに基づいて、正しいパスワードを入力してアイデンティティを検証することで接続を受け入れるか拒否することができます.そうでなければ、サーバーはあなたのアクセスを完全に拒否します.そうでなければ、サーバーは接続を受け入れて、段階2に入って要求を待っています.あなたのアイデンティティは2つの情報に基づいています.あなたはそのホストからMySQLユーザーに接続します.名前
アイデンティティーチェックは3つのuserテーブル(Host,User,Password)を使用します.範囲列が実行されます.サーバーは、ユーザー表に記録されているHost列とUser列がクライアントホスト名とユーザー名に一致し、正しいパスワードが指定されている場合にのみ接続を受け入れます.ユーザー表Host値の指定方法:Host値はホスト名またはIP番号、または「localhost」はネイティブを示します.ホスト値にワイルドカード文字「%」と「」を使用できます..Host値'%'は任意のホスト名に一致し、空のHost値は'%'に等しい.これらの意味はLIKEオペレータのモードマッチング操作と同じです.たとえば、'%'のHost値はすべてのホスト名に一致し、'%.mysql.com'はmysql.comドメインのすべてのホストに一致します.
・IP番号として指定されたHost値について、ネットワーク番号を評価するために何ビットのアドレスビットを使用するかを示すネットワークマスクを指定できます.たとえば、・mysql>GRANT ALL PRIVILEGES ON db.*->->TO david@'192.58.197.0/255.255.255.00';davidが任意のクライアントからIP番号client_ipで接続できるようにします.以下の条件は真です:client_ip&netmask=host_ip That is,for theGRANT statement just shown:client_ip&255.255.255.00=192.58.197.0この条件を満たし、MySQLサーバに接続できるIP番号の範囲は192.58.197.0から192.58.197.255です.・注釈:ネットワークマスクは、8、16、24または32ビットのアドレスを使用することをサーバに伝えるためにのみ使用されます.たとえば、192.0.0/255.0.0(192 Aクラスネットワークの任意のアドレス)・192.168.0.0/255.255.0.0(192.168 Aクラスネットワークの任意のアドレス)・192.168.1.0/255.255.255.255.0(192.168.1 Cクラスネットワークの任意のアドレス)・192.168.1.1(このIPのみ)以下のネットワークマスク(28ビット)は無効です:192.168.0.1/255.255.255.240・dbテーブルレコードの空のHost値は、クライアント名に一致するhostテーブルの行に権限を結合して使用する必要があることを示します.AND(結合)によって、または(連合)ではなくAND(結合)によって操作によって権限が結合されます.5.7.6節、「アクセス制御、フェーズ2:確認要求」からhostテーブルの詳細を検索できます.他のgrantテーブルの空のHost値は'%'と同じです.HostフィールドでIPワイルドカード値を使用できる以上('144.155.166.%'はサブネット上の各ホストに一致します).ああ、誰かがこの能力を探求しようとしている可能性があります.ホスト名は144.155.166.somewhere.comです.このような企みを阻止するために、MySQLは数字と点から始まるホスト名のマッチングを許可しません.このように、1.2.foo.comのようなホスト名を使用すると、その名前は許可表のHost列に決して一致しません.IP番号がIP通に一致するのは1つだけです.ワイルドカードの値です.ワイルドカード文字はUser列では許可されませんが、空の値を指定できます.ユーザーは、ユーザーが実際に指定した名前ではなく、空のユーザー名と一致します.ユーザーは、ユーザーが空のユーザー名と一致する場合、クライアントが実際に指定した名前ではなく匿名のユーザーとみなされます.これは、接続中のさらなるアクセスチェックに空のユーザー名が使用されることを意味します.(すなわち、フェーズ2の間).Password列は空であってもよい.これはワイルドカードではなく、任意のパスワードに一致することを意味するものではない.これは、ユーザーがパスワードを指定して接続しなければならないことを意味する.userテーブルの空でないPassword値は、暗号化されたパスワードを意味する.MySQLは、誰にも見られない明文テキスト形式でパスワードを格納するのではなく、逆に接続しようとしているユーザーが提供したパスワードは暗号化される(PASWORD()関数)は、接続中に暗号化されたパスワードを使用してパスワードが正しいかどうかをチェックします.(暗号化されたパスワードは接続されていないで実現できます).MySQLの観点から、暗号化されたパスワードは実際のパスワードなので、他の人にアクセスさせるべきではありません!特に、mysqlデータベースのテーブルを管理されていないユーザーに絶対に読ませないでください!
mysqlパスワードの忘れと変更
パスワードを忘れた場合は、プロファイル/etc/my.confを変更して--skip-grant-tablesを追加してmysqldを再起動することでパスワードを変更できます.
mysql> **SELECT * FROM user;**
mysql> SET PASSWORD FOR '*some_user*'@'*some_host*' = PASSWORD('mypass');