MySQL에서 새 사용자를 생성하고 하나의 데이터베이스에 대한 전체 액세스 권한을 부여하십시오


628

MySQL에서 새 사용자를 만들고 dbTest같은 명령으로 만든 하나의 데이터베이스에만 전체 액세스 권한을 부여하고 싶습니다 create database dbTest;. 그렇게하는 MySQL 명령은 무엇입니까?

답변:


829

사용자를 작성하려면 다음을 시도하십시오.

CREATE USER 'user'@'hostname';

데이터베이스에 대한 액세스 권한을 부여하려면 다음을 시도하십시오 dbTest.

GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

동일한 머신에서 MySQL에 액세스하는 코드 / 사이트를 실행중인 경우 호스트 이름은 localhost입니다.

자, 고장.

GRANT -이것은 사용자를 생성하고 데이터베이스, 테이블 등에 대한 권한을 부여하는 데 사용되는 명령입니다.

ALL PRIVILEGES-사용자에게 모든 표준 권한이 있음을 알려줍니다. 그러나 GRANT 명령을 사용하는 권한은 포함되지 않습니다.

dbtest.*-이 지침은 MySQL이 전체 dbtest 데이터베이스에서 사용하기 위해 이러한 권한을 적용하도록 지시합니다. 원하는 경우 *를 특정 테이블 이름 또는 상점 루틴으로 바꿀 수 있습니다.

TO 'user'@'hostname'- 'user'는 작성중인 사용자 계정의 사용자 이름입니다. 참고 : 작은 따옴표가 있어야합니다. 'hostname'은 MySQL에게 사용자가 연결할 수있는 호스트를 알려줍니다. 같은 컴퓨터에서만 사용하려면localhost

IDENTIFIED BY 'password' -짐작 하셨겠지만, 이것은 해당 사용자의 비밀번호를 설정합니다.


82
네트워크 액세스를 허용하고 호스트에서 연결을 원하는 경우 'hostname'을 '%'로 변경할 수 있습니다. 예를 들어 ... TO 'dbuser'@ '%'IDENTIFIED ... '%'는 호스트 와일드 카드입니다.
물리학 마이클

17
사용자와 테이블에서 작업 할 때 권한을 플러시하는 것을 잊지 마십시오! :-)
corsiKa

31
이것은 나를 위해 일했다 : CREATE USER 'user1'@ 'localhost'IDENTIFIED BY 'password'; db_database1. *에 대한 모든 권한을 부여하십시오. 'user1'@ 'localhost'에 'password'로 식별됩니다. 홍당무;
Mohamad Fakih

4
@DanMcGrath : 사용자가 이미 존재하고 비밀번호가있는 경우 IDENTIFIED BY 'password'절이 필수입니까?
nanosoft

8
GRANT를 사용하여 새로운 사용자를 생성하는 것은 향후 MySQL 릴리스에서 제거 될 것입니다 (이 시점에서는 더 이상 사용되지 않음). 앞으로는 CREATE USER와 GRANT의 두 가지 호출로 수행해야합니다.
Darren Felton

325

통사론

MySQL / MariaDB 5.7.6 이상에서 사용자를 만들려면 다음 CREATE USER구문을 사용하십시오 .

CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';

다음 데이터베이스 (예 : 모든 액세스 권한을 부여하기 위해 my_db사용) GRANT구문을 , 예를 들어,

GRANT ALL ON my_db.* TO 'new_user'@'localhost';

여기서 ALL( priv_type가 ) 특정 권한 등으로 대체 될 수있는 SELECT, INSERT, UPDATE, ALTER, 등

그런 다음 새로 할당 된 권한을 다시로드하려면 다음을 실행하십시오.

FLUSH PRIVILEGES;

실행

위의 명령을 실행하려면 명령을 실행 mysql하고 프롬프트에 입력 한 다음 quit명령 또는 Ctrl- 로 로그 아웃해야합니다 D.

쉘에서 실행하려면 -eparameter를 사용 하십시오 ( SELECT 1위의 명령 중 하나로 대체 ).

$ mysql -e "SELECT 1"

또는 표준 입력의 진술을 인쇄하십시오.

$ echo "FOO STATEMENT" | mysql

당신이 가지고있는 경우에 액세스가 거부 위로 지정 -u(사용자) 및 -p매개 변수 (암호), 또는 장기에 대한 액세스는 귀하의 자격 증명을 설정 ~/.my.cnf, 예를 들어,

[client]
user=root
password=root

셸 통합

MySQL 구문에 익숙하지 않은 사람들을 위해 기억하고 사용하기 쉬운 편리한 쉘 함수가 있습니다 (이를 사용하려면 추가로 포함 된 쉘 함수를로드해야합니다).

예를 들면 다음과 같습니다.

$ mysql-create-user admin mypass
| CREATE USER 'admin'@'localhost' IDENTIFIED BY 'mypass'

$ mysql-create-db foo
| CREATE DATABASE IF NOT EXISTS foo

$ mysql-grant-db admin foo
| GRANT ALL ON foo.* TO 'admin'@'localhost'
| FLUSH PRIVILEGES

$ mysql-show-grants admin
| SHOW GRANTS FOR 'admin'@'localhost'
| Grants for admin@localhost                                                                                   
| GRANT USAGE ON *.* TO 'admin'@'localhost' IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4' |
| GRANT ALL PRIVILEGES ON `foo`.* TO 'admin'@'localhost'

$ mysql-drop-user admin
| DROP USER 'admin'@'localhost'

$ mysql-drop-db foo
| DROP DATABASE IF EXISTS foo

위의 명령을 사용하려면 다음 함수를 rc 파일 (예 :) 에 복사하여 붙여넣고 .bash_profile쉘을 다시로드하거나 파일을 소스해야합니다. 이 경우 다음을 입력하십시오 source .bash_profile.

# Create user in MySQL/MariaDB.
mysql-create-user() {
  [ -z "$2" ] && { echo "Usage: mysql-create-user (user) (password)"; return; }
  mysql -ve "CREATE USER '$1'@'localhost' IDENTIFIED BY '$2'"
}

# Delete user from MySQL/MariaDB
mysql-drop-user() {
  [ -z "$1" ] && { echo "Usage: mysql-drop-user (user)"; return; }
  mysql -ve "DROP USER '$1'@'localhost';"
}

# Create new database in MySQL/MariaDB.
mysql-create-db() {
  [ -z "$1" ] && { echo "Usage: mysql-create-db (db_name)"; return; }
  mysql -ve "CREATE DATABASE IF NOT EXISTS $1"
}

# Drop database in MySQL/MariaDB.
mysql-drop-db() {
  [ -z "$1" ] && { echo "Usage: mysql-drop-db (db_name)"; return; }
  mysql -ve "DROP DATABASE IF EXISTS $1"
}

# Grant all permissions for user for given database.
mysql-grant-db() {
  [ -z "$2" ] && { echo "Usage: mysql-grand-db (user) (database)"; return; }
  mysql -ve "GRANT ALL ON $2.* TO '$1'@'localhost'"
  mysql -ve "FLUSH PRIVILEGES"
}

# Show current user permissions.
mysql-show-grants() {
  [ -z "$1" ] && { echo "Usage: mysql-show-grants (user)"; return; }
  mysql -ve "SHOW GRANTS FOR '$1'@'localhost'"
}

참고 : Bash 기록에 추적 (예 : 비밀번호)을 남기지 않으려면 bash 기록에 명령이 표시되지 않게하는 방법을 확인하십시오.


1
사용자를 작성하고 특권을 별도로 부여해야합니까? grant 명령은 사용자 자체를 작성하는 것으로 나타났습니다. 최소한 mysql.user 테이블을 보면 그렇게 보입니다.
Tim

@CreativityKills ~/.my.cnf위에서 제안한대로 비밀번호를 추가하면 비밀번호로 작업합니다 .
kenorb 2012

쉘 기록에 암호의 흔적을 남기는 것은 좋은 생각이 아닙니다
dmirkitanov

@dmirkitanov 공백을 추가하여이를 방지 할 수 있습니다. bash 기록에 명령이 표시되지 않도록하는 방법은 무엇입니까?
kenorb

58

사용자를 작성하고 데이터베이스에 대한 모든 권한을 부여합니다.

MySQL에 로그인하십시오 :

mysql -u root

이제 생성하고 부여

GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

익명 사용자 (로컬 테스트 전용)

또는 데이터베이스에 대한 모든 무제한 액세스 권한을 부여하려는 경우 (예 : 테스트 인스턴스의 로컬 시스템에서) 다음과 같이 익명 사용자에게 액세스 권한을 부여 할 수 있습니다.

GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'

알고

개발중인 정크 데이터에 적합합니다. 당신이 관심있는 일로 이것을하지 마십시오.


3
그런 익명의 사용자를 만들 수는 있지만 그렇게하지 마십시오! 완전한 권한이 있고 암호가없는 사용자를 가질만한 이유는 없지만, 누군가가 없어야하는 서버에 액세스 할 수있게되면 하루 / 년 / 비즈니스 / 직업을 망칠 수 있습니다. 왜 다른 것들을 더 쉽게 만들 수 있습니까?
Luke Cousins

2
누군가 내 맥북에 원격으로 액세스 할 수 있다면 개발 데이터베이스의 내용보다 걱정할 것이 더 많습니다. 다시 한 번 말하지만, 이것은 로컬 테스트 전용이며 실제 데이터로는 수행하지 마십시오.
superluminary

4
정확히, 걱정할 다른 모든 것들과 함께 개발자 데이터베이스의 내용에 대해서도 걱정하지 마십시오. 개발자 데이터베이스에는 아마도 라이브 데이터베이스 데이터 조각 (예 : 버그 복제)이있을 수 있습니다.이 버그는 보안을 유지하기 위해 모든 노력을 기울여야합니다. 비밀번호없이 데이터베이스에 액세스 할 필요가 없습니다. 시간도 절약되지 않습니다. 잠재적 번거 로움이 없습니다.
Luke Cousins

1
혹시. 내 경우에는 정크 데이터이므로 위험에 처할 것입니다.
superluminary

17
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"

mysql 사용자에게 비밀번호가 없거나- [Enter] "버튼을 눌러 바이 패스하려면 -p 옵션을 무시 하십시오. 중괄호로 묶인 문자열은 실제 값으로 바꿔야합니다.


13

CREATE USER 문을 사용하여 새 사용자를 작성 하고 GRANT를 사용하여 권한을 부여 할 수 있습니다 .


'mypass'로 식별 된 사용자 'jeffrey'@ 'localhost'작성;
cgl

6

나에게 이것은 효과가 있었다.

CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234'; 
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost'; 
FLUSH PRIVILEGES;

어디

  • spowner : 사용자 이름
  • 1234 : 소유자의 비밀번호
  • 테스트 : 데이터베이스 'spowner'에 대한 액세스 권한이 있습니다

2

아래 명령은 새로운 사용자를 생성하여 로컬 호스트의 특정 데이터베이스 (Mysql의 모든 데이터베이스가 아님)에 대한 모든 액세스 권한을 부여하려는 경우 작동합니다.

GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

로컬 호스트의 해당 사용자 에게 하나의 데이터베이스 test_database(귀하의 경우 dbTest) 에 대한 모든 권한을 부여합니다 .

아래 명령을 실행하여 위 명령이 해당 사용자에게 발행 한 권한을 확인하십시오.

SHOW GRANTS FOR 'user'@'localhost'

하나의 단일 테이블로만 사용자 액세스를 제한하려는 경우를 대비하여

GRANT ALL ON mydb.table_name TO 'someuser'@'host';

구문 오류 및 첫 번째 줄의 오타 인 "PRIVILEGES ON 'test_datase'"는 따옴표가 없어야하며 그 뒤에 ". *"(예 : test_datase. *)가 있어야하며 오타는 "test_database 여야합니다. ".
Brettins

0

경우에는 host부분은 와일드 카드 기호에 기본값을 생략 %모든 호스트를 허용.

CREATE USER 'service-api';

GRANT ALL PRIVILEGES ON the_db.* TO 'service-api' IDENTIFIED BY 'the_password'

SELECT * FROM mysql.user;
SHOW GRANTS FOR 'service-api'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.