2013-07-23 4 views
40

중복 된 질문이라고 생각하기 전에, 다소 희미한 경우 라 할지라도 나는 고유하다고 생각합니다.MySQL 데이터베이스에서 권한 제거

며칠 전 우분투 10.04 서버의 MySQL 버전을 5.3.3으로 업그레이드했습니다 (우분투 10.04보다 앞서 있음). 오늘, 나는 뭔가를 위해 phpMyAdmin에 로그인하려고 시도하고 다소 두려운 Connection for controluser as defined in your configuration failed 오류를 발견했습니다.

이 문제를 해결하는 방법에 대한 몇 가지 질문에 대한 설명을 따른 후에 나는 갇혀있다.

  • 내가 성공하지, reconfigure phpMyAdmin을 시도했다.
  • uninstall phpMyadmin and reinstall으로 시도했지만 db에서 권한을 제거 할 수 없어 실패했습니다.
  • 그런 다음 사용자의 manually remove the privileges을 시도했습니다. 다소 어리석게도, db에서 추가 한 다음 db를 삭제 한 다음 사용자 (flush privileges)와 함께 삭제할 수 있습니다.
  • 나는 전체가 완전히 phpMyAdmin을의 설치 떨어졌다 (응용 프로그램을 삭제하고는/etc/phpMyAdmin을 디렉토리) 및 다시 설치는 (apt-get을 사용)하지만이 phpMyAdmin을 사용자에 대한 권한이 이미 존재했다 :

granting access to database phpmyadmin for [email protected]: already exists

그래서 여기에 내가 남겨둔 것이있다. 나는 수정하거나 취소 할 수 없습니다 지원금이 있습니다

mysql> show grants for 'phpmyadmin'@'localhost'; 
+-------------------------------------------------------------------------------------------------------------------+ 
| Grants for [email protected]                     | 
+-------------------------------------------------------------------------------------------------------------------+ 
| GRANT USAGE ON *.* TO 'phpmyadmin'@'localhost' IDENTIFIED BY PASSWORD '*46CFC7938B60837F46B610A2D10C248874555C14' | 
| GRANT ALL PRIVILEGES ON `phpmyadmin`.* TO 'phpmyadmin'@'localhost'            | 
+-------------------------------------------------------------------------------------------------------------------+ 
2 rows in set (0.26 sec) 

mysql> revoke usage on *.* from 'phpmyadmin'@'localhost'; 
ERROR 1141 (42000): There is no such grant defined for user 'phpmyadmin' on host 'localhost' 

mysql> revoke usage on *.* from 'phpmyadmin'@'localhost' identified by 'trustno1'; 
ERROR 1141 (42000): There is no such grant defined for user 'phpmyadmin' on host 'localhost' 

(난 더 이상이 암호를 사용하지 않는, 걱정하지 마세요, 그러나 이전에 사용 된 암호였다을 그리고 내가 선택한 암호 아니다 새로운 phpmyadmin 설치).

어떻게 이러한 보조금/특권을 완전히 제거합니까? 필요하다면 처음부터 다시 시작하게되어 기쁩니다 (phpmyadmin 즉, db가 아닙니다).

답변

82

mysql의 USAGE 권한은 단순히 글로벌 레벨 *.*에 정의 된 'phpadmin'@ 'localhost'사용자에 대한 권한이 없다는 것을 의미합니다. 또한 동일한 사용자는 데이터베이스 phpmyadmin phpadmin.*에 대해 ALL 권한을가집니다.

그래서 당신이 다음 모든 권한을 제거하고 완전히 처음부터 다시 시작하려면 :

REVOKE ALL PRIVILEGES ON phpmyadmin.* FROM 'phpmyadmin'@'localhost';

  • 드롭 사용자 '

    • 는 데이터베이스 레벨의 모든 권한을 취소 phpmyadmin '@'localhost '

      DROP USER 'phpmyadmin'@'localhost';

    위의 절차를 수행하면 인스턴스에서 사용자가 완전히 삭제되므로 처음부터 다시 만들 수 있습니다.

    위에서 설명한 내용에 대한 약간의 설명을 드리 자면 사용자를 생성하자마자 mysql.user 테이블이 채워집니다. 기록을 보면, 사용자와 모든 특권이 'N'으로 설정되어 있음을 알 수 있습니다.show grants for 'phpmyadmin'@'localhost';을 수행하면 위의 결과가 모두 표시됩니다. 단순히 "사용자를위한 글로벌 수준의 권한 없음"으로 번역됩니다. 데이터베이스 수준에서이 사용자에게 부여 ALL을 부여하면 테이블 mysql.db에 저장됩니다. SELECT * FROM mysql.db WHERE db = 'nameofdb';을 수행하면 모든 priv에 'Y'이 표시됩니다.

    위 설명은 현재 데이터베이스에있는 시나리오를 보여줍니다. 그러므로 오직 USAGE 권한을 가진 사용자는이 사용자가 연결할 수 있음을 의미하지만 SHOW GLOBAL VARIABLES; SHOW GLOBAL STATUS; 외에 그는 다른 권한이 없습니다.

  • +2

    이 후에 '특권'을 가져야합니까? –

    +0

    오늘까지 이것을 볼 수 없었습니다. 그리고 당신의 대답이 권한 문제를 해결했습니다, 감사합니다. 그러나, 내 '구성에 정의 된대로 제어 사용자에 대한 연결에 실패했습니다.'오류가 남아 있지만 다른 문제입니다. – Cyntech

    +1

    'DROP USER'는 mysql.user 및 mysql.db 테이블에서 사용자 액세스를 완전히 제거하는 데 필요한 모든 것입니다. 'REVOKE'는 지정된 권한에 대한 테이블 중 하나 또는 둘 모두에서 권한 플래그를 단순히 'N'으로 토글하지만 사용자는 그대로 남겨 둡니다. 그리고 네,'REVOKE' 문 다음에'FLUSH PRIVILEGES'가 필요합니다.'DROP' 조작 후에는 그렇지 않습니다. –

    12

    부수적으로 revoke usage on *.* from 'phpmyadmin'@'localhost';이 작동하지 않는 이유는 매우 간단합니다. USAGE이라는 보조금이 없습니다.

    The actual named grants are in the MySQL Documentation

    보조금 USAGE는 논리적 부여합니다. 방법? 'phpmyadmin'@ 'localhost'는 사용자가 'phpmyadmin'이고 호스트가 'localhost'인 항목을 mysql.user에 있습니다. 의미 적으로 mysql.user의 모든 행은 USAGE을 의미합니다. DROP USER 'phpmyadmin'@'localhost';을 실행하면 정상적으로 작동합니다. 후드, 정말이 일 것 :

    DELETE FROM mysql.user WHERE user='phpmyadmin' and host='localhost'; 
    DELETE FROM mysql.db WHERE user='phpmyadmin' and host='localhost'; 
    FLUSH PRIVILEGES; 
    

    따라서, mysql.user에서 행의 제거가 REVOKE USAGE이 그대로 실행되지 않을 수 있지만, REVOKE USAGE을 실행하는 것을 의미합니다.