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

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



답변

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

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' -짐작 하셨겠지만, 이것은 해당 사용자의 비밀번호를 설정합니다.


답변

통사론

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 기록에 명령이 표시되지 않게하는 방법을 확인하십시오.


답변

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

MySQL에 로그인하십시오 :

mysql -u root

이제 생성하고 부여

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

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

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

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

알고

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


답변

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

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


답변

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


답변

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

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

어디

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

답변

아래 명령은 새로운 사용자를 생성하여 로컬 호스트의 특정 데이터베이스 (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';