eddik 发表于 2018-10-6 07:28:52

mysql用户和权限管理

  mysql用户管理
  MYSQL是一个多用户的数据库,MYSQL的用户可以分为两大类:
  1.超级管理员用户(root),拥有全部权限。
  2.普通用户,由root创建,普通用户只拥有root所分配的权限。
  创建数据库用户
  1.CREATE USER创建用户
  使用CREATE USER语句创建用户,必须要拥有CREATE USER权限。其格式如下
  CREATE USER user 'password';
  其中,user参数表示新建用户的账户,user由用户名(User)和主机名(Host)构成;IDENTIFIED BY关键字用来设置用户的密码;password参数表示用户的密码;如果密码是一个普通的字符串,就不需要使用PASSWORD关键字。可以没有初始密码。

  mysql> CREATE USER 'paul'@'%'>  执行之后user表会增加一行记录,但权限暂时全部为‘N’。
  2.INSERT语句创建用户
  可以使用INSERT语句直接将用户的信息添加到mysql.user表。但必须拥有mysql.user表的INSERT权限。
  mysql>INSERT INTO mysql.user(Host,User,Password) VALUES
  ('%','Cherry',PASSWORD('123456'));
  mysql> FLUSH PRIVILEGES;
  执行INSERT之后,要使用命令:FLUSH PRIVILEGES;命令来使用户生效。
  3. GRANT语句创建用户
  用GRANT来创建新的用户时,能够在创建用户时为用户授权。但需要拥有GRANT权限。
  语法如下:
  GRANT priv_type ON database.table TO user 'password']
  priv_type:参数表示新用户的权限;
  databse.table:参数表示新用户的权限范围;
  user:参数新用户的账户,由用户名和主机构成;
  IDENTIFIED BY关键字用来设置密码;
  password:新用户密码;
  4.删除用户
  4.1.DROP USER 删除用户
  DROP USER语句删除普通用户,需要拥有DROP USER权限。 删除完成后,一样要FLUSH PRIVILEGES才生效。
  语法如下:
  DROP USER user[,user]...
  mysql> drop user Cherry;
  user是需要删除的用户,由用户名(User)和主机名(Host)构成
  4.2 DELETE 语句删除普通用户
  可以使用DELETE语句直接将用户的信息从mysql.user表中删除。但必须拥有对mysql.user表的DELETE权限。DELETE FROM mysql.user WHERE Host = ‘%’ AND User = ‘admin’; 删除完成后,一样要FLUSH PRIVILEGES才生效。
  mysql> DELETE FROM mysql.user WHERE Host='%'AND User='Paul';
  mysql> FLUSH PRIVILEGES;
  修改用户密码
  1. 用mysqladmin 修改root用户密码
  语法:mysqladmin -u用户名 -p旧的密码 password 新密码
  # mysqladmin -uroot -p123 password 123456
  2. 用SET语句修改密码
  使用root用户登录到MySQL服务器后,可以使用SET语句来修改密码:
  修改自己的密码,不需要用户名
  格式:
  mysql>SET PASSWORD FOR ‘USERNAME’@’HOST’=PASSWORD(‘new_pass’);
  SET PASSWORD = PASSWORD("123");
  mysql> SET PASSWORD=PASSWORD('redhat');
  修改其他用户密码:
  SET PASSWORD FOR 'myuser'@'%'=PASSWORD("123456") FOR 用户名@主机名
  3. 修改user表
  UPDATE user表的passwor字段的值,也可以达到修改密码的目的;
  mysql> UPDATE mysql.user SET Password=PASSWORD('123') WHERE USER='root';
  mysql> FLUSH PRIVILEGES; 刷新后生效。
  4.设置新密码
  # mysqladmin -uroot -p password
  Enter password:    #输入旧密码
  New password:   #输入新密码
  Confirm new password:   #确认新密码
  5.初始化mysql数据库,并配置root用户密码。使用如下命令:
  # mysql_secure_installation
  设置mariadb的密码为abc123
  忘记用户密码解决办法
  普通用户,直接用root超级管理员登录进去修改密码就可以了,但是如果root密码丢失了,怎么办呢?
  方法一:
  1.mysqld_safe方式找回密码
  # service mysqld stop;            停止mysql
  # mysqld_safe --skip-grant-tables&   安全模式启动
  # mysql -uroot –p                  无密码回车键登录
  重置密码:
  mysql> use mysql;
  mysql>update user set password=password("123456") where user='root' and host='localhost';
  mysql> flush privileges;
  正常启动:
  # service mysqld restart
  方法二:
  1、在配置文件/etc/my.cnf添加skip-grant-tables一行,跳过密码验证。
  2、重启mysql数据库主进程# /etc/init.d/mysqld restart(也可以直接先停掉MySQL进程后使用skip-grant-tables参数重启MySQL)
  3、登录数据库修改密码。mysql> update user set authentication_string=password('') where user='root' and host='localhost';
  mysql> flush privileges;
  这里需要修改的字段是authentication_string,这点和之前的旧版本不同。
  4、将my.cnf中mysqld节点的skip-grant-tables配置删除,然后重新启动服务即可。
  mysql权限管理
  安装MySQL时会自动安装一个名为mysql的数据库。mysql数据库里面存储的都是权限表。与权限相关的数据表:user,db,host,tables_priv,columns_priv,procs_priv等
  用户权限管理主要有以下作用:
  1. 可以限制用户访问哪些库、哪些表
  2. 可以限制用户对哪些表执行SELECT、CREATE、DELETE、DELETE、ALTER等操作
  3. 可以限制用户登录的IP或域名
  4. 可以限制用户自己的权限是否可以授权给别的用户
  mysql 的权限体系大致分为5个层级:
  全局层级全局权限
  适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤销全局权限。
  数据库层级
  数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤销数据库权限。
  表层级
  表权限适用于一个给定表中的所有列。这些权限存储在mysql.talbes_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。
  列层级
  列权限适用于一个给定表中的单一列。这些权限存储在mysql.columns_priv表中。当使用REVOKE时,您必须指定与被授权列相同的列。
  子程序层级

  CREATE ROUTINE,>  这些权限信息存储在下面的系统表中:
  mysql.user
  mysql.db
  mysql.host
  mysql.table_priv
  mysql.column_priv
  当用户连接进来,mysqld会通过上面的这些表对用户权限进行验证!
  我们可以用 CREATE USER 或 GRANT 创建用户,后者还同时分配相关权限。而 REVOKE 则用于删除用户权限,DROP USER 删除账户。MySQL 赋予用户权限命令语法为:
  grant 权限 on 数据库对象 to 用户;

  grant 权限 on 数据库对象 to 用户>
  grant 权限 on 数据库对象 to 用户@"ip">  GRANT 语法:
  GRANT privileges (columns)
  ON what

  TO user>  WITH GRANT OPTION;
  privileges 列表:

  *>  * CREATE: 创建数据库和表。
  * DELETE: 删除表中已有的记录。
  * DROP: 抛弃(删除)数据库和表。
  * INDEX: 创建或抛弃索引。
  * INSERT: 向表中插入新行。
  * REFERENCE:未使用。
  * SELECT: 检索表中的记录。
  * UPDATE: 修改现存表记录。
  * FILE: 读或写服务器上的文件。
  * PROCESS: 查看服务器中执行的线程信息或杀死线程。

  *>  * SHUTDOWN: 关闭服务器。
  * ALL: 所有权限,ALL PRIVILEGES同义词。
  * USAGE: 特殊的 "无权限" 权限。
  下面创建一个test用户,密码为test,并且只能对studb数据库进行操作的命令
  语法:
  GRANT UPDATE(cid,cname) ON mysqlpart2.custom TO 'user3'@'localhost';

  mysql> GRANT ALL ON studb.* TO test>  GRANT语句的语法看上去像这样:

  GRANT privileges (columns) ON what TO user>  mysql> flush privileges;
  撤销所有权限
  语法:
  REVOKE 权限 ON 数据库.表 FROM'用户名'@'登录主机;

  mysql> REVOKE ALL ON studb.* FROM test>  mysql> flush privileges;
  注:说明:赋权与撤销权限的区别,就是REVOKE是将to改为from
  查看权限
  show grants;//自己
  show grants for dba@localhost;//指定用户指定host
  设置权限时必须给出一下信息
  1,要授予的权限
  2,被授予访问权限的数据库或表
  3,用户名
  grant和revoke可以在几个层次上控制访问权限
  1,整个服务器,使用 grant ALL和revokeALL
  2,整个数据库,使用ondatabase.*
  3,特点表,使用ondatabase.table
  4,特定的列
  5,特定的存储过程
  user表中host列的值的意义
  %            匹配所有主机
  localhost    localhost不会被解析成IP地址,直接通过UNIXsocket连接
  127.0.0.1      会通过TCP/IP协议连接,并且只能在本机访问;
  ::1               ::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1

页: [1]
查看完整版本: mysql用户和权限管理