我想在MySQL中创建一个新用户,并且只对一个数据库提供完全访问权限,比如dbTest
我用一个命令创建的数据库create database dbTest;
.那些MySQL命令会做什么?
试试这个来创建用户:
CREATE USER 'user'@'hostname';
试试这个让它访问数据库dbTest
:
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
如果您在同一台计算机上运行访问MySQL的代码/站点,则hostname将是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.
要从shell运行,请使用-e
参数(替换SELECT 1
为以上命令之一):
$ mysql -e "SELECT 1"
或从标准输入打印声明:
$ echo "FOO STATEMENT" | mysql
如果您已通过上述访问被拒绝,请指定-u
(针对用户)和-p
(针对密码)参数,或者为长期访问设置您的凭据~/.my.cnf
,例如
[client] user=root password=root
对于不熟悉MySQL语法的人来说,这里有方便的shell函数,易于记忆和使用(要使用它们,你需要加载包含在下面的shell函数).
这是一个例子:
$ 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
)并重新加载shell或获取文件.在这种情况下只需输入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'" }
登录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;"
忽略-p选项,如果mysql用户没有密码或只需按"[Enter]"按钮旁路.用大括号括起来的字符串需要替换为实际值.
您可以使用CREATE USER语句创建新用户,并使用GRANT为其授予权限.
对我来说这很有效.
CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234'; GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost'; FLUSH PRIVILEGES;
哪里
spowner:用户名
1234:spowner的密码
测试:数据库'spowner'具有访问权限