1. 程式人生 > >MySQL && MySQL密碼修改、新增使用者、刪除使用者與授權

MySQL && MySQL密碼修改、新增使用者、刪除使用者與授權

密碼管理

修改已知原密碼

  • 方法1: 用SET PASSWORD命令 首先登入MySQL。
 set password for root@localhost = password('123'); 
  • 方法2:用mysqladmin
mysqladmin -uroot -p123456 password 123
  • 方法3:用UPDATE直接編輯user表 首先登入MySQL。
update mysql.user set password=password('123') where user='root' and host='localhost'; 
flush privileges
;

忘記密碼

  • 修改配置檔案

Default options are read from the following files in the given order: /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf

如果以上配置檔案有衝突,那麼以最後讀取到的為主 [mysqld] 標籤新增引數skip-grant-tables 跳過授權表。

vim /etc/my.cnf
[mysqld]
skip-grant-tables  跳過授權表
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

然後執行修改已知密碼的 方法1方法3 操作

  • 直接以後檯安全程序啟動mysql
/usr/bin/mysqld_safe --skip-grant-tables &

然後執行已知密碼的 方法1方法3 操作

使用者管理

1、建立使用者

create user user@host;
create user user@host identified by 'password';

@localhost 表示使用者只能在本地登入 @% 表示在任何一臺電腦上都可以登入 @ip 表示在指定IP電腦上可以登入 @domain 表示在指定域名下可以登入

or

insert into
mysql.user(Host,User,Password) values("localhost","test",password("1234"));

使用者的資訊儲存在mysql資料庫中的user表中,驗證使用者是否建立成功如下:

select user,host,password from mysql.user;	    

2、使用者許可權

  • 許可權分類:
USAGE 無許可權,只有登入資料庫,只可以使用test或test_*資料庫
ALL 所有許可權
select/update/delete/super/slave/reload 指定的許可權
with grant option 允許把自己的許可權授予其它使用者或者從其他使用者收回自己的許可權
  • 作用範圍:
*.* 全庫、全表(mysql.user)
mysql.* mysql庫下所有表(某庫中的所有表)(mysql.db)
mysql.user mysql庫中user表(單表)(mysql.table_priv)
mysql.user.host mysql庫中user表的host列(mysql.columns_priv)
  • 主機登入許可權:
[email protected] 表示user只能在本地通過socket登入伺服器
表示user使用者只能在192.168.0.1登入資料庫伺服器
指定某個子網的主機可以登入資料庫
[email protected]% 表示user使用者能在所有的機器上登入資料庫伺服器
  • 使用者授權:

授權test使用者擁有testDB資料庫的所有許可權(某個資料庫的所有許可權) 格式:grant 許可權 on 資料庫.* to 使用者名稱@登入主機 identified by “密碼”;

grant all privileges on testDB.* to test@localhost identified by '1234';
flush privileges;//刷新系統許可權表

如果想指定部分許可權給一使用者,可以這樣來寫:

grant select,update on testDB.* to test@localhost identified by '1234';
flush privileges; //刷新系統許可權表

授權test使用者擁有所有資料庫的某些許可權:

grant select,delete,update,create,drop on *.* to [email protected]"%" identified by "1234";

test使用者對所有資料庫都有select,delete,update,create,drop 許可權。 @"%" 表示對所有非本地主機授權,不包括localhost。(localhost地址設為127.0.0.1,如果設為真實的本地地址,不知道是否可以,沒有驗證。)

對localhost授權:

grant all privileges on testDB.* to test@localhost identified by '1234';
  • 許可權的儲存位置:
mysql.user 所有mysql使用者的賬號和密碼,以及對使用者對全庫全表許可權(.
mysql.db 非mysql庫的授權都儲存在此(db.*)
mysql.table_priv 某庫某表的授權(db.table)
mysql.columns_priv 某庫某表某列的授權(db.table.col1)
mysql.procs_priv 某庫儲存過程的授權
  • 回收許可權:revoke
revoke update,select on mysql.user from test@localhost;  	撤消指定的許可權
revoke all privileges,grant option from test@'%';           撤消所有的許可權
  • 刪除使用者:
drop user user01@'localhost';	                            刪除使用者
select user from mysql.user where user='user01';	       驗證使用者是否刪除成功
drop user user;                                          預設刪除該使用者從任意主機登陸
rename user [email protected]'instructor.example.com' to [email protected]'localhost';  重新命名使用者名稱
show grants;                                              檢視使用者許可權
show grants for user02@'%';                               檢視指定使用者的許可權 
drop user ''@'rhel6.example.com';                        刪除一個匿名使用者
delete from mysql.user where user='';		            刪除mysql中的匿名使用者
delete from mysql.user where user='root' and host='::1';     刪除mysql中ipv6
flush privileges;