显示标签为“GRANT”的博文。显示所有博文
显示标签为“GRANT”的博文。显示所有博文

2013年12月7日星期六

ERROR 1356(HY000)

Original post: http://anothermysqldba.blogspot.com/2013/12/error-1356-hy000.html

後一個錯誤來時要了解的最重要的事情是要花點時間和放鬆。 
有時,人們遇到一個錯誤運行,並成為慌亂和沮喪。 深呼吸和放鬆。 有時候,“ 瘋狂就像重力。所有這一切需要的是輕輕一推 “和” 有時,問題是複雜的,答案很簡單 。“ 

這是什麼一回事呢? 嗯比如我最近被要求幫助解決了困擾其它DBA的一個問題。 在尊重各沒什麼意思了DBA,但在匆忙的人只是被忽視的 答案 就是在他們面前的,而是螺旋式下降到 瘋狂  

下面是這種情況的一般概念。 

做一個數據庫的mysqldump在用戶移動到另一個數據庫為他人被測試。 導入工作就好了。 但是,用戶開始發現錯誤,當他們試圖從一個預先構建的視圖來查詢。 

的mysql> SELECT * FROM <View_name>限制1; 

ERROR 1356(HY000):查看'。<DB_NAME>的<Viewname>'引用了無效的表(S)或列(S)或函數(S)或視圖缺乏權利定義者/調用者使用它們 

第一反應是假設出事了與進口。 做了視圖或實際的相關表被損壞? 

 

為了解決這個錯誤的第一件事待辦事項是:MySQL的>顯示創建視圖<View_Name> \ G 

你可能會看到的東西,是這樣開始的: 
*************************** 1。 排*************************** 
查看:訪問者 
 
創建視圖:CREATE ALGORITHM = UNDEFINED DEFINER =`<Some_user>`@`<Some_host_or_IP>`SQL SECURITY DEFINER查看 

當你看到誰定義者是:`<Some_user>`@`<Some_host_or_IP>` 您可以查看贈款該用戶。 

MySQL的>展會補助`<Some_user>`@`<Some_host_or_IP>`; 

原來,該解決方案是擺在首位的錯誤只是說什麼:“ 來看缺乏權利定義者/調用者使用它們  

為了方便您可以在那裡已經工作了數據庫做一個節目的贈款和複製GRANT語句,或者你可以查看什麼類型的權限,你需要在新的數據庫來實現,以使視圖來收集所需的數據。 

為用戶和權限錯誤的一個簡單的更新不見了。 

 有時候,答案很簡單 。“ 

2013年5月19日星期日

MySQL的用戶::資助:: mysql_config_editor ::保安

Original post: http://anothermysqldba.blogspot.com/2013/05/mysql-users-grants-mysqlconfigeditor.html

安全對數據庫的訪問是任何數據庫管理員可能優先頭號。 如果不是,那麼你需要認真研究一下為什麼它是不是。 

已經可以通過手動的一般準則: 


MySQL中的主要安全問題之一當然是給你的用戶的權限。 
這些都是一些簡單的指引。 

首先“超級用戶”或“根”賬戶保持到最低限度。 用戶完全訪問“GRANT ALL”將仍然可以訪問,當你已經達到你的最大連接。 所以你想的最後一件事是一個程序,一個具有完全訪問權限的用戶執行命令。 

請記住,您正在創建什麼類型的帳戶。 您可以限制用戶最大查詢,最大的更新,最大連接數和每小時的最大用戶連接 。 

請記住您的用戶連接的網絡環境。 如果用戶將要使用DHCP的網絡地址在同一子網內,你只是為自己創造更多的工作,如果你限制到一個單一的IP。 您仍然可以限制他們的子網雖然帶有通配符。 例如'192 .168.0.2'與'192 .168.0% 

遠離整個通配符的主機和用戶的訪問。 



> CREATE USER ''@'192.168.0.56' ;
Query OK, 0 rows affected (0.02 sec)

> show grants for ''@'192.168.0.56';
+-----------------------------------------+
| Grants for @192.168.0.56 |
+-----------------------------------------+
| GRANT USAGE ON *.* TO ''@'192.168.0.56' |
+-----------------------------------------+


這將使你敞開,任何人從192.168.0.56是不是一個聰明的安全的事情。 
它也違反其他帳戶,因為MySQL從192.168.0.56首先檢查主機的用戶名和第二。 


> GRANT SELECT ON test.* TO 'exampleuser'@'192.168.0.%' IDENTIFIED BY 'somepassword';

> show grants for 'exampleuser'@'192.168.0.%';
+----------------------------------------------------------------------------------------------------------------------+
| Grants for exampleuser@192.168.0.% |
+----------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'exampleuser'@'192.168.0.%' IDENTIFIED BY PASSWORD '*DAABDB4081CCE333168409A6DB119E18D8EAA073' |
| GRANT SELECT ON `test`.* TO 'exampleuser'@'192.168.0.%' |
+----------------------------------------------------------------------------------------------------------------------+

這將允許只選擇為exampleuser從'192 .168.0%。 您還必須牢記,如果exam​​pleuser的是從本地主機連接,該系統將可能用戶本地主機之前,先192.168.0。%的子網地址,除非用戶使用的子網地址主機連接。 

這意味著,你可以創建一個每個主機的不同權限的用戶名和密碼。 


> SHOW GRANTS FOR 'exampleuser'@'localhost';
+--------------------------------------------------------------------------------------------------------------------+
| Grants for exampleuser@localhost |
+--------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'exampleuser'@'localhost' IDENTIFIED BY PASSWORD '*DAABDB4081CCE333168409A6DB119E18D8EAA073' |
| GRANT SELECT, UPDATE, DELETE ON `test`.* TO 'exampleuser'@'localhost' |
+--------------------------------------------------------------------------------------------------------------------+

你最好不要通過mysql客戶端使用中 - password = <密碼>選項。 您可以使用-p來提示輸入密碼。 

您也可以選擇與MySQL 5.6中使用MySQL的配置實用程序 。 


# mysql_config_editor set --login-path=local --host=localhost --user=root --password
Enter password: 




# mysql_config_editor print --all
[local]
user = root
password = *****
host = localhost 


#mysql的
ERROR 1045(28000):拒絕訪問用戶'根'@'localhost'的(使用密碼:否)

#mysql的 - 登錄路徑=當地
歡迎到MySQL監視器。

#mysql的 - 登錄路徑=本地-E“SELECT NOW()';

你有不同的路徑,例如本地或遠程等選項來命名。 所以,你可以在你的〜加密多個接入用戶帳戶,一旦您使用set命令創建/ mylogin.cnf文件。 

如果你有使用mysql客戶端的shell腳本,並有可能再有密碼的腳本更新他們使用“ -登錄路徑=”是一種更安全的路要走。 


當然,當你不再需要的用戶... 刪除用戶。 


> DROP USER 'exampleuser'@'localhost';