在数据库中用户管理是非常严格的,平时用的root账户在企业当中是不允许使用的.因为它的权限太大.
平常使用的时候一般使用普通账户,授予一定的权限,然后用于管理数据库.
每一个应用会有一个账户,比如论坛,对应会创建一个数据库.创建数据库的过程中要创建一个用户,这个用户去管理我们这个论坛的数据库.如果遇到黑客攻击,对我们服务器来讲并没有太大的伤害.
一:用户管理
MySQL用户管理
1:登录和退出MySQL
[root@localhost ~]# mysql -h 1.1.1.1 -P 3306 -u root -p123 mysql -e ‘select user,host from user’
#B主机远程链接到A主机的数据库,需要A主机的数据库先登陆去授权.
mysql> grant all privileges on *.* to root@'%' identified by 'xxxx';
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#A主机的授权操作.
-h 指定主机名 【默认为localhost】
-P MySQL服务器端口 【默认3306】
-u 指定用户名 【默认root】
-p 指定登录密码 【默认为空密码】
此处mysql为指定登录的数据库
-e 接SQL语句 (在脚本中使用)
2. 创建用户
方法一:CREATE USER语句创建
mysql> create user TNT; #这种方法一般不用
mysql> create user TNT@’%’ identified by ‘123456’; #这样可以直接从远程登录
mysql> create user TNT@'%' identified by 'xxxxx';
Query OK, 0 rows affected (0.00 sec)
#创建用户TNT@跟上这个用户的权限,localhost代表本机,百分号代表所有主机.然后授权数据库的密码.
方法二: GRANT语句创建(授权)
mysql> GRANT ALL privileges ON . TO ‘tnt’@’localhost’ IDENTIFIED BY ‘xxxxx’;
mysql> GRANT ALL privileges ON *.* TO 'tnt'@'localhost' IDENTIFIED BY 'TNTnb@123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
#授予数据库所有权限给账户tnt@localhost本机,给授权密码.
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#刷新授权表.
mysql> select * from mysql.user\G
*********** 6. row ***************************
Host: localhost
User: tnt
#查看有没有这个账户存在.这里要注意了,有这个账户,但HOST是localhost,这个账户远程链接会被拒绝的,相当于是只能创建了个账户.
mysql> grant select,insert on k1.* to admin1@’%’ identified by ‘123’;
flush privileges;
查看单独的库权限
mysql> select * from mysql.db\G
mysql> grant select,insert on k1.* to admin1@'%' identified by 'xxxxxx';
Query OK, 0 rows affected, 1 warning (0.00 sec)
#这里和第一条有点不一样,这里是单独授予某种权限,并限制了哪个库.
#授予查看和插入权限并且是k1这个库的所有表,给admin1这个账户所有主机,并授予数据库的密码.
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
[root@localhost ~]# mysql -u admin1 -pxxxxx
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.00 sec)
[root@localhost ~]# mysql -u root -pxxxxx
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| company |
| mysql |
| performance_schema |
| sys |
+--------------------+
#然后分别登陆admin1和root用户,会发现admin1只能看到某个表.
注意:
ALL privileges 所有的权限 也可以授权单独的权限
*.* 所有的表所有的库 也可以授权单独的库和单独的表
TNT@localhost 用户有则授权无则创建 授权账户可以在哪些主机登陆
localhost 本机
% 所有主机
10.19.40.%
10.19.40.11
3. 删除用户
方法一:DROP USER语句删除
DROP USER ‘user1’@’localhost’;
mysql> drop user admin1@'%';
#drop可以直接删除.
Query OK, 0 rows affected (0.00 sec)
方法二:DELETE语句删除
DELETE FROM mysql.user WHERE user=‘user2’ AND host=’localhost’;
FLUSH PRIVILEGES; 刷新授权表
mysql> delete from mysql.user where user='tnt' and host='localhost';
#这里其实是去删除mysql.user\G里面的某个字段.
#delete要用where去判断,两个条件符合才会删除.
Query OK, 1 row affected (0.03 sec)
4. 修改用户密码
root修改自己密码
方法一:
mysqladmin -uroot -p’123’ password ‘new_password’ //123为旧密码
[root@localhost ~]# mysqladmin -u root -p'旧密码' password '新密码';
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
#直接命令行修改.
方法二:
mysql> update mysql.user set authentication_string=password(‘新密码’) where user=‘root’ and host=‘localhost’;
mysql>