데이터베이스에 ** all ** 권한 부여


611

데이터베이스를 만들었습니다 (예 : 'mydb').

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH';
GRANT ALL ON mydb.* TO 'myuser'@'%';
GRANT ALL ON mydb TO 'myuser'@'%';
GRANT CREATE ON mydb TO 'myuser'@'%';
FLUSH PRIVILEGES;

이제 어디서나 데이터베이스에 로그인 할 수 있지만 테이블을 만들 수는 없습니다.

해당 데이터베이스 및 향후 테이블에 대한 모든 권한을 부여하는 방법 'mydb'데이터베이스에서 테이블을 만들 수 없습니다. 나는 항상 얻는다 :

CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
ERROR 1142 (42000): CREATE command denied to user 'myuser'@'...' for table 't'

10
CURRENT_USER의 GRANTS를 표시하면 무엇을 얻을 수 있습니까?
대각선

5
당신은 실행을 시도 했습니까 FLUSH PRIVILEGES?
Romain 2019

1
@Andy "SHOW GRANTS FOR CURRENT_USER;"에 감사드립니다. -오타를 볼 수있게 도와줍니다.
marioosh

2
@Romain flush privilegesgrant명령 을 사용할 때 필요하지 않습니다 . x4
Pacerier

2
당신은 사용해야 FLUSH PRIVILEGES;당신이 직접 다음과 같은 문장 사용 권한 테이블 수정하는 경우에만 INSERT, UPDATE또는DELETE
simhumileco

답변:


910
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;

이것이 내가 "슈퍼 사용자"권한을 만드는 방법입니다 (일반적으로 호스트를 지정하지만).

중요 사항

이 답변은 액세스 문제를 해결할 수 있지만 다른 사용자의 권한을 편집WITH GRANT OPTION 할 수있는 MySQL 사용자를 만듭니다 .

GRANT OPTION 권한을 사용하면 다른 사용자에게 자신이 소유 한 권한을 다른 사용자에게 제공하거나 다른 사용자로부터 제거 할 수 있습니다.

보안상의 이유로 일반 사용자가 액세스 할 수있는 프로세스 (예 : 웹 사이트)에이 유형의 사용자 계정을 사용해서는 안됩니다. 해당 종류의 데이터베이스 권한 만있는 사용자작성하는 것이 좋습니다 .


35
@Romain 당신은 실제로 테이블에 많은 것을 가져 오지 않습니다-나는 내 사용자 이름을 myuser로 지정하지 않습니다-질문자는 단순히 사용자 이름을 예로 사용했습니다-일관성을 위해 동일한 예제 사용자 이름을 사용했습니다.
대각선

22
그럴 수 있지. 그러나 나중에이 질문을 읽을 수있는 다른 사람들, 아마도 초보자들도 생각해야합니다. SO의 요점이 아닌가?
Romain

7
나는 또한이 대답이 좋은 것이라고 생각하지 않습니다. 모든 데이터베이스와 모든 테이블에 대해 "관리자"권한을 부여하지만 요청 된 것은 아닙니다.
daks

5
이 답변을 대신 mydb. *라고 수정했습니다 . , 그것은 널리 찬성되고 검토 된 답변이므로 보안, 특히 MySQL과 같은 세련된 똥이있는 보안은 매우 중요하다고 생각합니다. 독자는 복사하여 붙여 넣기보다는 답의 세부 사항을 조사하기를 희망하지만, 실제로는 가끔 살고 싶어합니다.
Jordan

4
@Romain MySQL 서버를 설치하는 사용자 myuser는 자신의 사용자 이름으로 바꾸어야한다는 사실을 충분히 알고있을 것 입니다.
AStopher

524

이것은 오래된 질문이지만 허용되는 대답이 안전하다고 생각하지 않습니다. 수퍼 유저를 생성하는 데는 좋지만 단일 데이터베이스에 대한 권한을 부여하려는 경우에는 좋지 않습니다.

grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';

%소켓 통신을 다루지 않는 것 같습니다 localhost. WITH GRANT OPTION수퍼 유저에게만 유용합니다. 그렇지 않으면 일반적으로 보안 위험이 있습니다.

MySQL 5.7+ 업데이트 는 다음과 같이 경고합니다.

GRANT 문을 사용하여 권한 이외의 기존 사용자 특성을 수정하는 것은 더 이상 사용되지 않으며 향후 릴리스에서 제거 될 예정입니다. 이 작업에는 ALTER USER 문을 사용하십시오.

따라서 비밀번호 설정은 별도의 명령을 사용해야합니다. @ scary-wombat의 의견에 감사드립니다.

ALTER USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
ALTER USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';

도움이 되었기를 바랍니다.


26
WITH GRANT OPTION지정된 데이터베이스를 모두 포함하지 않고 타겟팅 하지 않은 경우 +1입니다 ( *).
Adonis K. Kakoulidis

@IanBussieres "%의 소켓 통신을 다루지 않는 것 같다"는 문법은 명확하지 않다. 이것이 실제로 무엇을 의미합니까?
Thufir

2
@Thufir에서를 검색하십시오 unix sockets. 사용하는 경우 localhost리눅스에 myslq 클라이언트를 유닉스 소켓 대신 서버에 TCP 연결을 사용하도록 노력하고있다.
akostadinov 2016 년

1
외부 IP 주소 나 로컬 서브넷의 다른 컴퓨터에서 액세스하지 않는 한 첫 번째 명령이 필요하지 않을 수도 있습니다. 그럴 경우, 일반적으로 myuser @ %가 아닌 myuser@192.168.0.1 (로컬 서브넷의 경우)과 같이 허용하려는 특정 IP 주소를 대상으로하는 명령을 사용하는 것이 좋습니다.
Evan Donovan 's

1
mysql> ALTER USER 'root'@ 'localhost' 'new_password'에 의해 식별 됨;
무서운 웜뱃

121

이것은 일부 사람들에게 도움이 될 것입니다.

MySQL 명령 행에서 :

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

안타깝게도이 시점에서 newuser에게는 데이터베이스 관련 작업이 없습니다. 사실, 새로운 사용자가 (비밀번호, 비밀번호로) 로그인을 시도하면 MySQL 쉘에 도달 할 수 없습니다.

따라서 가장 먼저해야 할 일은 필요한 정보에 대한 액세스 권한을 사용자에게 제공하는 것입니다.

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

이 명령의 별표는 데이터베이스 및 테이블 (각각)이 액세스 할 수 있음을 나타냅니다.이 특정 명령을 사용하면 모든 데이터베이스 및 테이블에서 모든 작업을 읽고 편집하고 실행하고 수행 할 수 있습니다.

새 사용자에 대해 설정하려는 권한을 완료 한 후에는 항상 모든 권한을 다시로드하십시오.

FLUSH PRIVILEGES;

변경 사항이 적용됩니다.

자세한 정보 : http://dev.mysql.com/doc/refman/5.6/en/grant.html

커맨드 라인에 익숙하지 않다면 MySQL workbench , Navicat 또는 SQLyog 와 같은 클라이언트를 사용할 수 있습니다


5
flush privilegesgrant명령 을 사용할 때는 필요하지 않습니다 . x4
Pacerier

1
Linode에서 도매로 복사하거나 귀하로부터 복사 한 것 : linode.com/docs/databases/mysql/…

나는 GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost' IDENTIFIED BY 'my_password' WITH GRANT OPTION;(이상한 ..., 그러나 사실)로 다시 식별해야했다
rubo77

30

 1. 데이터베이스 생성

CREATE DATABASE db_name;

 2. 데이터베이스 db_name의 사용자 이름을 작성하십시오.

GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';

 3. 데이터베이스를 사용하십시오

USE db_name;

 4. 마지막으로 데이터베이스 db_name에 있고 create, select 및 insert 작업과 같은 명령을 실행합니다.


오늘은 "권한 이외의 기존 사용자 속성을 수정하기 위해 GRANT 문을 사용하는 것은 더 이상 사용되지 않으며 향후 릴리스에서 제거 될 것입니다.이 작업에는 ALTER USER 문을 사용하십시오"라는 경고를 표시했습니다. 이제 사용자를 만든 다음 권한을 부여해야한다는 것을 이해해야합니까?
felwithe

MySQL에게 username모든 권한을 가져야 db_name하지만 권한이없는 것을 어떻게 알 수 DROP db_name;있습니까?
토닉 스

21

이 SQL은 모든 데이터베이스에 기본 권한 만 부여합니다. 그것들은 Drupal 또는 Wordpress에 충분하며 한 명의 개발자가 로컬 프로젝트를 설명 할 수 있습니다.

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
    INDEX, ALTER, CREATE TEMPORARY TABLES 
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

20
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';

스키마에 대한 권한으로 작동합니다. :)

선택 사항 : mypasswd추가 한 후WITH GRANT OPTION


15

GRANT OPTION항상 권한 거부 오류가 발생하지 않고을 추가하여 작동하도록 만들 수 있습니다.

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;

14

안녕하세요,이 코드를 사용하여 mysql의 슈퍼 사용자를 보유했습니다.

GRANT EXECUTE, PROCESS, SELECT, SHOW DATABASES, SHOW VIEW, ALTER, ALTER ROUTINE,
    CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP,
    EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, CREATE USER, FILE,
    LOCK TABLES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN,
    SUPER
        ON *.* TO mysql@'%'
    WITH GRANT OPTION;

그리고

FLUSH PRIVILEGES;

11
flush privilegesgrant명령 을 사용할 때는 필요하지 않습니다 . x4
Pacerier

참고 : 정확한 목록 GRANT은 MySQL 버전에 따라 다릅니다.
Rick James

6

원격 서버에서 mydb 데이터베이스로만 액세스하려면

GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';

원격 서버에서 모든 데이터베이스에 액세스합니다.

GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';

4

데이터베이스에 대한 모든 권한을 mydb사용자 에게 부여하려면 다음 을 myuser실행하십시오.

GRANT ALL ON mydb.* TO 'myuser'@'localhost';

또는:

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';

PRIVILEGES키워드는 필요하지 않습니다.

또한 나는 다른 대답이 왜 IDENTIFIED BY 'password'명령의 끝에 놓일 것을 제안하는지 모른다 . 나는 그것이 필요하지 않다고 믿는다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.