mysql_load_data及權限管理


————————————————————————————————————————

添加權限:

The only priv_type values you can specify for a table are SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT OPTION, INDEX, and ALTER.
"FILE" is only assigned as a GLOBAL permission
" The EXECUTION, FILE, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHOW DATABASES, SHUTDOWN, and SUPER privileges are administrative privileges that can only be granted globally (using ON *.* syntax)."

原來FILE這種權限屬於管理的權限,要賦予用戶時,必須要用*.*。(不可針對庫和表)
root@localhost:mysql.sock[(none)] 15:31:33>GRANT FILE ON *.* TO hx@localhost;
Query OK, 0 rows affected (0.00 sec)

問題解決。

————————————————————————————————————————

今天在使用mysql的LOAD DATA LOCAL INFILE 語法插入文件的時候,提示:ERROR 1148 (42000): The used command is not allowed with this MySQL version

    原因是;如果編譯安裝mysql時沒有指定–enable-local-infile,那么在使用上述命令時會報以上的錯誤:

    解決方法:

    解決方式有兩種,一是重新編譯安裝加上上面的參數,而是直接用命令行執行,如下:

    mysql -uroot -proot mydb_name --local-infile=1 -e 'load data local infile "D:/ab.txt" into table mytbl(name,age)'

————————————————————————————————————————

MySQL: ERROR13(HY000):Can't get stat of的問題
但是將LOAD DATA INFILE 
換成 
LOAD DATA LOCAL INFILE 
OK! 
 
原因分析: 
源自Mysql中文手冊: 
出於安全原因,當讀取位於服務器中的文本文件時, www.2cto.com 文件必須位於 數據庫目錄中,或者是全體可讀的。另外,要對服務器文件使用LOAD DATA INFILE,您必須擁有FILE權限。 
如果指定了LOCAL,則文件會被客戶主機上的客戶端讀取,並被發送到服務器。文件會被給予一個完整的路徑名稱,以指定確切的位置。

————————————————————————————————————————

MYSQL中的各種權限

對於GRANT和REVOKE語句,priv_type可以被指定為以下任何一種:

權限

意義

ALL [PRIVILEGES]

設置除GRANT OPTION之外的所有簡單權限

ALTER

允許使用ALTER TABLE

ALTER ROUTINE

更改或取消已存儲的子程序

CREATE

允許使用CREATE TABLE

CREATE ROUTINE

創建已存儲的子程序

CREATE TEMPORARY TABLES

允許使用CREATE TEMPORARY TABLE

CREATE USER

允許使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES。

CREATE VIEW

允許使用CREATE VIEW

DELETE

允許使用DELETE

DROP

允許使用DROP TABLE

EXECUTE

允許用戶運行已存儲的子程序

FILE

允許使用SELECT...INTO OUTFILE和LOAD DATA INFILE

INDEX

允許使用CREATE INDEX和DROP INDEX

INSERT

允許使用INSERT

LOCK TABLES

允許對您擁有SELECT權限的表使用LOCK TABLES

PROCESS

允許使用SHOW FULL PROCESSLIST

REFERENCES

未被實施

RELOAD

允許使用FLUSH

REPLICATION CLIENT

允許用戶詢問從屬服務器或主服務器的地址

REPLICATION SLAVE

用於復制型從屬服務器(從主服務器中讀取二進制日志事件)

SELECT

允許使用SELECT

SHOW DATABASES

SHOW DATABASES顯示所有數據庫

SHOW VIEW

允許使用SHOW CREATE VIEW

SHUTDOWN

允許使用mysqladmin shutdown

SUPER

允許使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL語句,mysqladmin debug命令;允許您連接(一次),即使已達到max_connections。

UPDATE

允許使用UPDATE

USAGE

“無權限”的同義詞

GRANT OPTION

允許授予權限

當從舊版本的MySQL升級時,要使用EXECUTE, CREATE VIEW, SHOW VIEW, CREATE USER, CREATE ROUTINE和ALTER ROUTINE權限

————————————————————————————————————————

授予的權限可以分為多個層級:

·         全局層級

全局權限適用於一個給定服務器中的所有數據庫。這些權限存儲在mysql.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤銷全局權限。

·         數據庫層級

數據庫權限適用於一個給定數據庫中的所有目標。這些權限存儲在mysql.db和mysql.host表中。GRANT ALL ONdb_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, ALTER ROUTINE, EXECUTE和GRANT權限適用於已存儲的子程序。這些權限可以被授予為全局層級和數據庫層級。而且,除了CREATE ROUTINE外,這些權限可以被授予為子程序層級,並存儲在mysql.procs_priv表中。

當后續目標是一個表、一個已存儲的函數或一個已存儲的過程時,object_type子句應被指定為TABLE、FUNCTION或PROCEDURE。當從舊版本的MySQL升級時,要使用本子句,您必須升級您的授權表。

————————————————————————————————————————


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM