来源:自学PHP网 时间:2015-04-16 10:51 作者: 阅读:次
[导读] 一直只是在浅显利用数据库存储数据,也被windows惯坏了,很多命令使用的时候记不起来,so,换LINUX系统!不再使用GUI管理数据库!也想深入学习下Mysql,从权限管理开始!也就诞生了这...
一直只是在浅显利用数据库存储数据,也被windows惯坏了,很多命令使用的时候记不起来,so,换LINUX系统!不再使用GUI管理数据库!也想深入学习下Mysql,从权限管理开始!也就诞生了这篇学习笔记。 修改默认密码Mysql新安装时默认root密码为空,极不安全!建议安装过后马上就修改。附修改方法: mysqladmin -u root -p password 接下来按提示输入新密码即可! 命令详解: mysqladmin -u root -p[oldpass] password newpass注意oldpass可选,如果root默认密码为空,则不需要输入,如果需要更改前密码,请注意前密码与-p之间不要有空格,否则会报错,另外password和newpass之间以空格分隔。这当然是废话,给初学者看的! 基本命令登录进入数据库这个很简单: mysql -u root -p你将会看到以下命令提示符,表明正确进入了 mysql> 可以输入help查看帮助信息。记得所有命令加上“;”这是语法规定。 命令解释: mysql [-u username] [-h host] [-p[password]] [dbname] 如果不输入password,回车后会出现Enter password的提示。如果root密码为空,也不需要输入password,出现Enter password提示后回车即可。 【可以在登录时指定host名以及数据库名。这个host是你远程登陆别人数据库时对方的地址!】 附加一条链接给那些密码改了忘记的人: windows下mysql忘记root密码的解决办法 查看数据库首先肯定是查看默认数据库了,使用命令: mysql> show databases;结果为: +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 使用数据库想使用某个数据库例如mysql这个数据库,使用use命令: mysql> use mysql;结果提示数据库改变了表示正确运行。 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed 库表基本操作查看库中的表进入数据库了,接下来查看表,还是show命令: mysql> show tables; 以下为结果: +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | | db | | event | | func | | general_log | | help_category | | help_keyword | | help_relation | | help_topic | | host | | ndb_binlog_index | | plugin | | proc | | procs_priv | | proxies_priv | | servers | | slow_log | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | user | +---------------------------+ 24 rows in set (0.00 sec)好了,我们已经学会了一些简单的数据库操作,接下来我们开始创建自己的数据库,数据表! 创建数据库简单命令: create database mydata;结果为: Query OK, 1 row affected (0.00 sec)提示已经成功。接下来我们用查看表命令,show: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mydata | | mysql | | performance_schema | +--------------------+ 5 rows in set (0.00 sec)好了,自己的数据库创建成功,先看看数据库里都有啥?答案肯定是什么都没有!我们查看一下: mysql> use mydata; Database changed mysql> show tables; Empty set (0.00 sec) 创建表So,接下来创建一个简单的表(注意我们上面已经使用了mydada数据库,接下来创建的表在这个数据库里,我们只能在数据库里创建表): mysql> create table table_name(name VARCHAR(20), age int); Query OK, 0 rows affected (0.02 sec) mysql> show tables; +------------------+ | Tables_in_mydata | +------------------+ | table_name | +------------------+ 1 row in set (0.00 sec) 查看表的结构成功之后,我们查看表的结构(使用describe): mysql> describe table_name; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | | age | int(11) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) 插入数据到表这时候表里面是没有数据的,插入数据(insert into):【说明:这里只是简单展示,更多详细命令请看官网文档(3000+页)】 mysql> insert into table_name values("The_Third_Wave", 100); Query OK, 1 row affected (0.02 sec) mysql> select * from table_name; +----------------+------+ | name | age | +----------------+------+ | The_Third_Wave | 100 | +----------------+------+ 1 row in set (0.00 sec) 更新表中数据mysql> update table_name set age=188 where name="The_Third_Wave"; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from table_name; +----------------+------+ | name | age | +----------------+------+ | The_Third_Wave | 188 | +----------------+------+ 1 row in set (0.00 sec) mysql> 导入数据到表【待补充】 清空表(delete)mysql> delete from table_name; Query OK, 1 row affected (0.00 sec) mysql> select * from table_name; Empty set (0.00 sec) 删除数据库或表(drop)mysql> drop table table_name; Query OK, 0 rows affected (0.00 sec) mysql> show tables; Empty set (0.00 sec) mysql> drop database mydata; Query OK, 0 rows affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 4 rows in set (0.00 sec) 权限管理以下是安装后默认用户组: mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> select Host,User,Password from user; +-----------------------------+------------------+-------------------------------------------+ | Host | User | Password | +-----------------------------+------------------+-------------------------------------------+ | localhost | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | | xxxxxxxxxxxxxxxxxxxxxxxxxxx | root | | | 127.0.0.1 | root | | | ::1 | root | | | localhost | debian-sys-maint | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | +-----------------------------+------------------+-------------------------------------------+ 5 rows in set (0.00 sec) 这里面中间三个host对应的root账户密码为空。【备注:不同版本的Mysql不一样,有些都会同时设置密码,不会像上面一样。】 看来我们前面只设置了Host:localhost对应的root账号的密码,我们使用mysql> select current_user();查看下当前登录的用户名: mysql> select current_user(); +----------------+ | current_user() | +----------------+ | root@localhost | +----------------+ 1 row in set (0.00 sec)注意user_name@host_name 这个user_name是用户名称, host_name是你选择连接到服务器的客户机的地址。而你在使用mysql -h host_name 这个host_name说的是服务器地址(上面有说明,注意区别)。 也就是说:比如你有一个msyql数据库在 db.csdn.com , 那你就mysql -u root -h db.csdn.com ,这和你自己的机器一点关系都没有,你的登录账号还是 root@yourPCname 这个可能不好理解,举个例子并练习下创建用户操作。 创建新用户并指定某个IP可以建立连接实际我的操作是在我的试验机上数据中创建远程访问用户账号(原因是:本机安全第一,我可不想单独还去设置下防火墙,而我的试验机没有防火墙!),目的是提供远程主机(我所用的电脑)访问本机(我的试验机)数据库的权限!【这句话有点绕】,因为默认账号是不可以非本机登录访问的,我用默认root账号连接到我的试验机会报以下错误: mysql -u root -h 我的试验机IP地址 -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'这里是我的本机IP地址' (using password: YES) 这样可以理解上面那段话吧? 接下来学习下用户权限设置,以下内容参考的是:MYSQL数据库管理之权限管理----飞鸿无痕 命令详解如下:GRANT命令使用说明 先来看一个例子,创建一个只允许从本地登录的超级用户feihong,并允许将权限赋予别的用户,密码为test@feihong.111 GRANT ALL PRIVILEGES ON *.* TO feihong@'localhost' IDENTIFIED BY'test@feihong.111' WITH GRANT OPTION; GRANT命令说明: ALL PRIVILEGES 是表示所有权限,你也可以使用select、update等权限提到的权限。 ON 用来指定权限针对哪些库和表。 *.* 中前面的*号用来指定数据库名,后面的*号用来指定表名。 TO 表示将权限赋予某个用户。 feihong@'localhost' 表示feihong用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。 IDENTIFIED BY 指定用户的登录密码。 WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其他用户授权。 备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加了一个select权限,然后又给用户添加了一个insert权限,那么该用户就同时拥有了select和insert权限。 以下都在我的是实验机上操作! mysql> GRANT USAGE,SELECT ON *.* TO public@'我的本机IP地址' IDENTIFIED BY 'pbpass' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec)在我的试验机使用以下命令可以查看用户表: select Host,User,Password from mysql.user;确定添加正确后我可以在本机远程登陆试验机啦 以下在本机操作! 我们再次尝试远程连接我的试验机数据库,使用我们在试验机上添加的访问账号去连接! <span style="color:#000000;">mysql -u public -h 我的试验机IP地址 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 5.6.15-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial) Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql></span>成功登陆我的实验室数据库,接下来的操作取决于你的权限,例如我创建的public账号只有访问权限,则这个账号就不能创建删除了! 我们查看下我的试验机有哪些用户: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sakila | | test | | world | +--------------------+ 7 rows in set (0.00 sec) mysql> select Host,User,Password from mysql.user; +-----------------+--------+-------------------------------------------+ | Host | User | Password | +-----------------+--------+-------------------------------------------+ | localhost | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | | 127.0.0.1 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | | ::1 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | | 本机IP地址 | public | *5067452449A119B7FA902EEDF47385AF750C6297 | +-----------------+--------+-------------------------------------------+ 5 rows in set (0.00 sec) mysql>如果你也是pbpass这个密码,你会发现共同点。So,安全很重要,数据库用户权限很重要,这提醒我们,mysql这样的特殊表,不要给其他任何人看到! 安全为本,So,删除哪些不需要的用户吧,等以后需要再添加不迟! 删除用户注意删除用户不要使用DELETE直接删除,因为使用DELETE删除后用户的权限并未删除,新建同名用户后又会继承以前的权限。正确的做法是使用DROP USER命令删除用户! drop user 'public'@我的本机IP地址; Query OK, 0 rows affected (0.00 sec)表示成功,可以再次查看。 更新用户密码其他的用户要不设置密码,要不删除。怎么设置密码呢? 方法一:mysqladmin开头已经说了一种方法,即使用以下命令: mysqladmin -u root -p[oldpass] password newpass 方法二:使用表更新命令mysql> UPDATE mysql.user SET Password=PASSWORD('新密码') WHERE User='root' and Host='127.0.0.1'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> FLUSH PRIVILEGES;需要注意一定要使用PASSWORD()函数!要不什么后果自己想。 方法三:set passwordmysql> set password for 'root'@'::1'=PASSWORD('新密码'); Query OK, 0 rows affected (0.00 sec) mysql>备注:更新完毕使用FLUSH PRIVILEGES;命令刷新权限,否则还是原来的密码! 本文由@The_Third_Wave(Blog地址:http://blog.csdn.net/zhanh1218)原创。还有未涉及的,会不定期更新,有错误请指正。 如果你看到这篇博文时发现没有不完整,那是我为防止爬虫先发布一半的原因,请看原作者Blog。 如果这篇博文对您有帮助,为了好的网络环境,不建议转载,建议收藏!如果您一定要转载,请带上后缀和本文地址。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com