0
点赞
收藏
分享

微信扫一扫

MySQL用户管理和权限设置

月半小夜曲_ 2022-02-26 阅读 71

一. 创建用户

命令:
CREATE USER ‘username’@‘host’ IDENTIFIED BY ‘password’;

例子:
CREATE USER ‘aaa’@‘localhost’ IDENTIFIED BY ‘123456’;
CREATE USER ‘aaa’@‘192.168.1.101_’ IDENDIFIED BY ‘123456’;
CREATE USER ‘aaa’@’%’ IDENTIFIED BY ‘123456’;
CREATE USER ‘aaa’@’%’ IDENTIFIED BY ‘’;
CREATE USER ‘aaa’@’%’;

二. 授权:

命令:
GRANT privileges ON databasename.tablename TO ‘username’@‘host’
例子:
GRANT SELECT, INSERT ON test.user TO ‘pig’@’%’;
GRANT ALL ON . TO ‘aaa’@’%’;
GRANT ALL ON maindataplus.* TO ‘pig’@’%’;
刷新权限:
flush privileges;每次修改都需要重新刷新权限

查看权限:
查看当前用户的权限:
mysql> show grants;
查看某个用户的权限:
mysql> show grants for ‘aaa’@’%’;
回收权限:
revoke delete on . from ‘aaa’@‘localhost’;

GRANT命令使用说明:
先来看一个例子,创建一个只允许从本地登录的超级用户jack,并允许将权限赋予别的用户,密码为:jack.
mysql> grant all privileges on . to aaa@‘localhost’ identified by “aaa” with grant option; Query OK, 0 rows affected (0.01 sec)
GRANT命令说明:
ALL PRIVILEGES 是表示所有权限,你也可以使用select、update等权限。
ON 用来指定权限针对哪些库和表。
. 中前面的号用来指定数据库名,后面的号用来指定表名。
TO 表示将权限赋予某个用户。
jack@‘localhost’ 表示jack用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。
IDENTIFIED BY 指定用户的登录密码。
WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其它用户授权。
备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加一个select权限,然后又给用户添加一个insert权限,那么该用户就同时拥有了select和insert权限。

三.设置与更改用户密码

命令:
SET PASSWORD FOR ‘username’@‘host’ = PASSWORD(‘newpassword’);
如果是当前登陆用户用:
SET PASSWORD = PASSWORD(“newpassword”);
例子:
SET PASSWORD FOR ‘aaa’@’%’ = PASSWORD(“123456”);

1、用set password命令
mysql> SET PASSWORD FOR ‘root’@‘localhost’ = PASSWORD(‘123456’);
Query OK, 0 rows affected (0.00 sec)
2、用mysqladmin
[root@rhel5 ~]# mysqladmin -uroot -p123456 password 1234abcd
备注:
格式:mysqladmin -u用户名 -p旧密码 password 新密码
3、用update直接编辑user表
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> update user set PASSWORD = PASSWORD(‘1234abcd’) where user = ‘root’;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
4、在丢失root密码的时候:
[root@rhel5 ~]# mysqld_safe --skip-grant-tables &
[1] 15953
[root@rhel5 ~]# 130911 09:35:33 mysqld_safe Logging to ‘/mysql/mysql5.5/data/rhel5.4.err’.
130911 09:35:33 mysqld_safe Starting mysqld daemon with databases from /mysql/mysql5.5/data

[root@rhel5 ~]# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.22 Source distribution

Copyright © 2000, 2011, 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> \s

mysql Ver 14.14 Distrib 5.5.22, for Linux (i686) using EditLine wrapper

Connection id: 2
Current database:
Current user: root@
SSL: Not in use
Current pager: stdout
Using outfile: ‘’
Using delimiter: ;
Server version: 5.5.22 Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /tmp/mysql.sock
Uptime: 36 sec

Threads: 1 Questions: 5 Slow queries: 0 Opens: 23 Flush tables: 1 Open tables: 18 Queries per second avg: 0.138

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> update user set password = PASSWORD(‘123456’) where user = ‘root’;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

四. 撤销用户权限

命令:
REVOKE privilege ON databasename.tablename FROM ‘username’@‘host’;
说明:
privilege, databasename, tablename:同授权部分
例子:
REVOKE SELECT ON . FROM ‘pig’@’%’;

五.删除用户

命令:
DROP USER ‘username’@‘host’;

示例
设置普通dba管理某个数据的权限
Grant ALL privileges on testdb to usernameDBA@’localhost’
Localhost是限制本地
Grant ALL on testdb to userNameDBA@’%’
ip没有限制
设置能查询mysql服务器上所有数据库的表
Grant select on . to userName@’%’
username用户不管在哪登陆都能操作mysql所有的数据库和表
Grant ALL on . to username@’%’
Username用户可以管理mysql服务器中所有的数据库
grant 作用在单个数据库上:
grant select on testdb.* to username@localhost;
grant 作用在单个数据表上:
Grant select on testdb.tablename to username@’%’
Grant作用在表的列上
Grant select(id,sex,rank) on testdb.tableName to username@’%’

查看用户权限
Show grants for username
赋予权限
Grant select on databaseName.* to username
Grant select, update, delete, insert on databaseName.* to username
回收权限
Revoke select, delete on databaseName.* from username
每次权限的修改都需要刷新权限
Flush privileges;
设置整个数据库的权限
Grant ALL on databaseName.* to username和 revoke ALL
Grant ALL on databaseName.table to username
授权给普通用户查询,插入,更新,删除对数据库所有表的权利
%标识这个用户ip没有限制
grant select, insert, update, delete on testdb.* to common_user@’%’
授权给开发者用户在testdb数据库创建表的权限,
限制ip只能是192.168.0开头的用户
grant create on testdb.* to developer@’192.168.0.%’;
设置索引的权限 设置用户在数据库上创建索引的权限
限制ip只能是192.168.0开头的用户
grant index on testdb.* to userName@’192.168.0.%’;
设置存储过程的权限
grant create routine on testdb.* to username@’192.168.0.%’;
grant alter routine on testdb.* to developer@’192.168.0.%’;

MySQL 有四种连接方式 :

1 TCP/IP
TCP/IP套接字连接方式是MySQL在任何平台都提供的一种连接方式,也是网络中使用最多的一种方式
如 : mysql -h ip -u username -p
可以使用 —skip-networking 选项禁止TCP/IP连接 .
远程连接的客户端连接的用户有权限才可以被连接 , 可通过查询 schema mysql 中的 user 表来得知用户权限 .
2 Unix Socket
只能使用MySQL客户端和数据库实例在同一台服务器上的情况下使用 .

3 named pipe
只适合在 windows 下使用此种方式连接 , 性能可比 tcp/ip 方式提升 30%-50% .
如 : mysql -u username -p password --protocol=pipe [ --socket=mysql ]
服务器端要求配置 : enable-named-pipe
socket=MySQL
后面选项中可不填 , --protocol=pipe 之后 --socket=mysql 可省略指定 .

4 shared memory
4.1 版本之后 , mysql 对 windows 系统还提供了共享内存的连接方式 . 由于此种连接方式几乎无法收到详细介绍 , 所以此连法之优缺点也不慎清楚 .
如 : mysql --protocol=memory --shared-memory-base-name=mysql
需要服务器端配置 : shared_memory=ON share_memory_base_name=mysql

修改MySQL字符集

3.1修改服务器级别字符集
a.临时修改
mysql>SET GLOBAL character_set_server=utf8;
b.永久修改
打开/etc/mysql/my.cnf,在[mysqld]后添加character-set-server=utf8

参考
https://blog.csdn.net/sin90lzc/article/details/7648439
https://blog.csdn.net/weixin_42502016/article/details/113141798

举报

相关推荐

0 条评论