1. 程式人生 > >mysql增加使用者並賦予、刪除、檢視各種許可權

mysql增加使用者並賦予、刪除、檢視各種許可權

資料庫系統表概述
mysql資料庫下儲存的都是許可權表,重要的有user表、db表、host表還有tables_priv表、columns_priv、proc_priv表
1、user表:有使用者列、許可權列、安全列、資源控制列。
1)、使用者列包括:host、user、password表示主機、使用者名稱、密碼。
2)、許可權列包括select_priv、insert_priv等以priv結尾的欄位。決定了使用者的許可權。這些欄位值只有y和n,y表示該許可權可以用到所有資料庫上;n表示該許可權不能用到所有資料庫上。可以用grant語句為使用者賦予一些許可權,也可以用update語句更新。如:grant_priv欄位表示是否擁有grant許可權;shutdown_priv欄位表示是否擁有停止mysql服務的許可權;super_priv欄位表示是否擁有超級許可權;execute_priv欄位表示是否擁有execute許可權,擁有該許可權可以執行儲存過程和函式。
3)、安全列:分別是ssl_type、ssl_cipher、x509_issuer、x509_subject。ssl用於加密;x509標準可以用來標識使用者。通常標準的發行版不支援ssl,讀者可以使用show variables like 'have_openssl'語句檢視是否具有ssl功能。如果have_openssl的取值為disabled,則不支援ssl加密功能。
4)、資源控制列:max_questions、max_updates分別規定每小時可以允許執行多少次查詢和更新、max_connections規定每小時可以建立多少連線;max_user_connctions規定單個使用者可以同時具有的連線數。預設值都為0表示沒有限制。

2、db表和host表
db表中儲存了某個使用者對一個數據庫的許可權。db表比較常用,而host表很少會用到。有使用者列和許可權列。
1)、分別是host、db、user。分別表示主機名、資料庫名和使用者名稱。host表的使用者列有兩個欄位,分別是host和db,分別表示主機名和資料庫名。
2)、host表是db表的擴充套件。如果db表中找不到host欄位的值,就需要到host表中去尋找。但是host表很少用到,通常db表的設定已經滿足要求了。
3)、許可權列:db表相比host表多了create_routine_priv欄位和alter_routine_priv欄位。決定使用者是否具有建立和修改儲存過程的許可權。user表中的許可權是針對所有資料庫。如果user表中select_priv欄位值為y,那麼該使用者可以查詢所有資料庫的表;如果為某使用者只設置查詢test表的許可權,那麼user表的select_priv欄位的取值為n。而這個這個許可權則記錄在db表中取值是y。使用者先根據user表的內容獲取許可權然後根據db表內容獲取許可權。

3、tables_priv表和columns_priv表
tables_priv表可以對單個表進行許可權設定,columns_priv表可以對單個數據列進行許可權設定。
1)、tables_priv表包含8個欄位分別是host、db、user、table_name、table_priv、column_priv、tiemstamp和grantor。前4個欄位分別表示主機名、資料庫名、使用者名稱和表名。許可權包括selecct、insert、update、delete、create、drop、grant、references、index、alter。column_priv許可權包括select、insert、update、references。timestamp表示修改許可權的時間。grantor表示許可權是誰設定的。
2)、columns_priv表包括7個欄位,分別是host、db、user、table_name、column_name、column_priv、tiemstamp。這裡多出了column_name欄位,表示可以對哪些資料列進行操作。
注:資料庫先判斷user表中值是否為y,如果user表值是y,就不需要檢查後面的表。如果user表值為n,則依次檢查db表、tables_priv表和columns_priv表。

4、procs_priv表
此表可以對儲存過程和儲存函式進行許可權設定。包含8個欄位分別是host、db、user、routine_name、routine_type、proc_priv、timestamp和grantor。routine_name欄位表示儲存過程或函式的名稱。routine_type欄位表示型別。該欄位有兩個取值分別是function和procedure。proc_priv欄位表示擁有的許可權,分別為3類,分別是execute、alter routine和grant。timestamp欄位儲存更新的時間;grantor欄位儲存許可權是誰設定的。

許可權管理
許可權名稱  對應user表中的列  許可權範圍
create  create_priv  資料庫、表或索引
drop  drop_priv  資料庫或表
grant option  grant_priv  資料庫、表、儲存過程或函式
references  references_priv  資料庫或表
alter  alter_priv  修改表
delete  delete_priv  刪除表
index  index_priv  用索引查詢表
insert  insert_priv  插入表
select  select_priv  查詢表
update  update_priv  更新表
create view  create_view_priv  建立檢視
show view  show_view_priv  檢視檢視
alter routine  alter_routine_priv  修改儲存過程或儲存函式
create routine  create_routine_priv  建立儲存過程或儲存函式
execute routine  execute_priv  執行儲存過程或儲存函式
file  file_priv  載入伺服器主機上的檔案
create temporary tables  create_tmp_table_priv  建立臨時表
lock tables  lock_tables_priv  鎖定表
create user  create_user_priv  建立使用者
process  process_priv  伺服器管理
reload  reload_priv  重新載入許可權表
replication client  repl_client_priv  伺服器管理
replication slave  repl_slave_priv  伺服器管理
show databases  show_db_priv  檢視資料庫
shutdown  shutdown_priv  關閉伺服器
super  super_priv  超級許可權

使用者管理
新建普通使用者
可以用create user語句、mysql.user表中新增使用者、還可以用grant語句新建使用者
1、create user語句:
格式:create user user1 [identified by [password] 'password'][,user2 [identified by [password]'password']]...
例:create user 'test1'@'localhost' identified by 'test1';//如果密碼是普通字串就不用加password引數
2、insert語句來新建普通使用者,直接將使用者資訊新增到mysql.user表
格式:insert into mysql.user(host,user,password) values('hostname','username',PASSWORD('password'));
注:要有對該表的insert許可權才行。一般只要新增host、user、password這三個欄位就行,其它欄位取值為預設值。如果某個欄位沒有預設值。這個語句將不能執行。要將沒有預設值的欄位也設定值。通常ssl_cipher、x509_issuer、x509_subject沒有預設值,所以插入時要設定值。
格式:insert into mysql.user(host,user,password,ssl_cipher,x509_issuer,x509_subject) values('hostname','username',PASSWORD('password'),'','','');
執行完後用flush privileges;使使用者生效。但是執行flush命令需要reload許可權。
3、grant語句來新建普通使用者
格式:grant priv_type [(column_list)] on database.table to user [identified by [password]'password'][,user[identified by [password]'password']...[WITH with_option[with_option]...]
注:WITH後面可以帶有一個或多個引數,如:
grant option:被授權的使用者可以將這些許可權賦予給別的使用者;這個特性一般用不到。實際中,資料庫許可權最好由 DBA 來統一管理。
max_queries_per_hour count:設定每個小時可以允許執行count次查詢;
max_updates_per_hour count:設定每個小時可以允許執行count次更新;
max_connections_per_hour count:設定每個小時可以建立count連線;
max_user_connections count:設定單個使用者可以同時具有的count個連線數;
例:grant select on testdb.* to 
[email protected]
with grant option; mysql> grant 許可權1,許可權2,…許可權n on 資料庫名稱.表名稱 to 使用者名稱[email protected]使用者地址 identified by '連線口令',使用者名稱[email protected]使用者地址 identified by '連線口令'; 許可權1,許可權2,…許可權n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14個許可權。 當權限1,許可權2,…許可權n被all privileges或者all代替,表示賦予使用者全部許可權。 --注:privileges可以省略 當資料庫名稱.表名稱被*.*代替,表示賦予使用者操作伺服器上所有資料庫所有表的許可權。 使用者地址可以是localhost,也可以是ip地址、機器名字、域名。也可以用"%"表示從任何地址連線。 如:mysql>grant select,insert,update,delete on *.* to 'user1'@'%' Identified by "123" 給來自所有地址的使用者user1分配可對所有資料庫所有表進行select,insert,update,delete,create,drop等操作的許可權,並設定口令為123。 注:grant可以修改使用者的密碼和許可權。 刪除普通使用者 1)、刪除普通使用者要有drop user許可權格式:drop user user1[,user2]...; 注:user引數是由使用者名稱和主機名組成。 例:drop user 'test2'@'localhost'; 2)、delete語句將使用者資訊從mysql.user表中刪除 delete from mysql.user where host='hostname' and user='username';//因為host和user兩個欄位都是主鍵,所以要兩個欄位才能確定一條記錄。 修改密碼 1、root使用者修改自己密碼 a、用mysqladmin命令修改密碼,格式:mysqladmin -u username -p password "new_password"; 注:這裡的password為關鍵字不是指舊密碼而且新密碼必須用雙引號括起來。 b、用update語句如:update mysql.user set password=password("new_password") where user="root" and host="localhost"; c、set語句,格式:set password=password("new_password"); 2、root使用者修改普通使用者密碼 a、set password for 'username'@'hostname'=password("new_password"); b、用update語句如:update mysql.user set password=password("new_password") where user="root" and host="localhost"; c、grant語句,格式:grant select on *.* to 'test3'@'localhost' identified by 'mytest3'; 3、普通使用者修改密碼 1、set password=password('new_password');注:普通使用者不能用mysqladmin命令,因為沒有super許可權 root使用者密碼丟失解決辦法 1)、使用--skip-grant-tables選項使伺服器停止許可權判斷,任何使用者都可以訪問資料庫。該選項跟在mysql服務命令後面,   windows中用mysqld或mysqld-nt啟動mysql服務,也可以用net start mysql啟動mysql服務。如: msyqld --skip-grant-tables或mysqld-nt --skip-grant-tables或net start mysql --skip-grant-tables   linux系統中用mysqld_safe啟動mysql服務,也可以用/etc/init.d/mysql啟動服務。如: mysqld_safe --skip-grant-tables user=mysql或/etc/init.d/mysql start --mysqld --skip-grant-tables 2)、用上面的方法停止許可權判斷後用update語句來修改密碼: 先用命令:mysql -u root登入 然後改密碼update mysql.user set password=password('root') where user='root' and host='localhost'; 最後flush privileges; 注:只能用update更新user表,不能用set語句 4、刷新系統許可權表 mysql>flush privileges; 注意,授權後必須FLUSH PRIVILEGES;否則無法立即生效。 5、檢視 MySQL 使用者許可權 檢視當前使用者(自己)許可權: show grants; 檢視其他 MySQL 使用者許可權: 1)、select * from mysql.user; 2)、show grants for 'username'@'hostname';//可以檢視許可權的語句 6、收回授予許可權 revoke priv_type [(column_list)]...on database.table from user [,user]... 注:column_list引數表示許可權作用於哪些列上,沒有該引數時作用於整個表上;user由使用者名稱和主機名構成; 收回全部許可權 格式:revoke all privileges,grant option from user[,user]... 例:revoke update on *.* from 'test5'@'localhost';

相關推薦

mysql增加使用者賦予刪除檢視各種許可權

資料庫系統表概述 mysql資料庫下儲存的都是許可權表,重要的有user表、db表、host表還有tables_priv表、columns_priv、proc_priv表 1、user表:有使用者列、許可權列、安全列、資源控制列。 1)、使用者列包括:host、user、p

JS陣列操作(陣列增加刪除翻轉轉字串取索引擷取(切片)slice剪接splice數組合)

POP 刪除最後一項 刪除最後一項,並返回刪除元素的值;如果陣列為空則返回undefine var a = [1,2,3,4,5]; a.pop();//a:[1, 2, 3, 4] a.pop();//a:[1, 2, 3] a.pop();//a:[1, 2] shif

資料庫中兩張表之間的資料同步實現思路(增加刪除更新)Mysqlsqlserver

分別建立增加、刪除、更新的觸發器(Trigger)來達到兩張表之間資料同步的目的。 1:資料同步增加:如有兩張表——A表和B表,建立觸發器使當A表插入資料後B表也同步插入資料。其中B表插入資料的欄位需要同A表中的欄位相對應。 CREATE TRIGGER 觸發器名稱 ON A表 AFTER INSERT

百度地圖新增marker獲取InfoWindow裡面的內容,實現marker的增加刪除編輯

<!DOCTYPE html> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="

JavaScript:陣列增加刪除翻轉轉字串取索引擷取(切片)slice剪接splice數組合

POP 刪除最後一項 刪除最後一項,並返回刪除元素的值;如果陣列為空則返回undefine var a = [1,2,3,4,5]; a.pop();//a:[1, 2, 3, 4] a.pop();//a:[1, 2, 3] a.pop();//a:[1, 2] s

DOM4j解析修改刪除增加保存XML的方法

exceptio set null 增加 gb2 itl str owin chang //XML文件 <?xml version="1.0" encoding="gb2312"?> <PhoneInfo> <Brand name="華為

[linux][mysql] 命令更改表結構:添加刪除修改字段調整字段順序

.com col inf size type unsigned rim alter name 原文出處:http://www.phpernote.com/MySQL/1120.html 1 常用的通過mysql命令來更改表結構的一些sql語句,包括添加、刪除、修改字

Mysql數據庫理論基礎之七--插入刪除更新語句

插入、刪除、更新語句一、簡介由MySQL AB公司開發,是最流行的開放源碼SQL數據庫管理系統,主要特點:1、是一種數據庫管理系統2、是一種關聯數據庫管理系統3、是一種開放源碼軟件,且有大量可用的共享MySQL軟件4、MySQL數據庫服務器具有快速、可靠和易於使用的特點5、MySQL服務器工作在客戶端/服務器

SQL增加刪除更改表中的字段名

del 更改 字段名 foreign 主鍵 刪除表 def 修改表 一個 1. 向表中添加新的字段 alter table table_name add column_name varchar2(20) not null 2. 刪除表中的一個字段 d

WPF 自定義OA現金盤平臺出租表格(可添加刪除拆分)

oar each dev col pri true ext bject http xaml代碼OA現金盤平臺出租QQ2952777280【話仙源碼論壇】hxforum.com【木瓜源碼論壇】papayabbs.com <Windowxmlns="http:/

MongoDB .Net Driver(C#驅動) - 內嵌數組/嵌入文檔的操作(增加刪除修改查詢(Linq 分頁))

odbc article err native linq protocol remove mit 實體類 目錄 一、前言 (一) 運行環境 二、前期準備工作 (一) 創建 MongoDBContext MongoDb操作上下文類 (二)創建測試類 (三) 創建測試代碼

Oracle表字段的增加刪除修改和重命名

column 表名 char arc 字段 var invoice apply efault 本文主要是關於Oracle數據庫表中字段的增加、刪除、修改和重命名的操作。 增加字段語法:alter table tablename add (column datatype [d

SpringBoot+Quartz學習實現定時任務控制Trigger的增加啟用刪除休眠

SpringBoot+Quartz學習實現定時任務控制Trigger的增加、啟用、刪除、休眠 標籤(空格分隔): SpringBoot Quartz 文章目錄 SpringBoot+Quartz學習實現定時任務控制Trigger的增加、啟用、刪除、休眠

MySQL使用者新建授權刪除修改等操作

mysql> GRANT all privileges on *.* to 'root'@'localhost' IDENTIFIED BY '*****' WITH GRANT OPTION; //本地操作授權 mysql> GRANT all privileges on *.

WPF DataGrid顯示MySQL查詢資訊,且可刪除修改插入

c# MySQL 1、入行好幾年了,工作中使用資料庫機率很小(傳統行業)。藉著十一假期回家機會,學習下資料庫。 2、初次瞭解資料庫相關知識,如果本文有誤,還望告知。 3、本文主要目的,記錄下wpf介面顯示資料庫資訊,且可進行刪除、修改、插入

mysql基礎-資料庫連線建立刪除選擇等基本操作詳解(一)

一、通過cmd連結到資料庫 或者 彈出: 二、通過cmd建立與刪除database 2.1create database [databasename] ERROR 1007 (HY000): Can’t create database ‘mytest’; database exists 加上IF N

oracle資料處理(增加刪除修改更新)

/* 資料處理 */ /* 插入資料 */ -- CREATE TABLE emp666 AS SELECT emp.employee_id, emp.last_name, emp.hire_date, emp.salary FROM employees emp WH

MySQL索引的建立刪除檢視

  · Table   表的名稱。   · Non_unique   如果索引不能包括重複詞,則為0。如果可以,則為1。   · Key_name   索引的名稱。   · Seq_in_index   索引中的列序列號,從1開始。   · Column_name   列名稱。   · Collation  

redis3.0 運維(動態增加刪除重新分配節點)

上一篇,我介紹了怎樣搭建redis 3.0叢集環境,本篇繼續學習怎樣人工干預redis 叢集環境,動態的增加、刪除、重新分配節點。 一、redis cluster 命令列 //叢集(cluster) CLUSTER INFO 列印叢集的資訊 CL

python---列表的切片增加刪除修改成員關係列表推導排序翻轉

python—列表的切片、增加、刪除、修改、成員關係、列表推導、排序翻轉 一、列表: 1、有序的集合 2、通過偏移來索引,從而讀取資料 3、支援巢狀 4、可變的型別 >>> a = [1,2,3,4,5,6,7] >>