在MySQL中创build新用户并授予其对一个数据库的完全访问权限

我是MySQLpipe理新手。 我想在MySQL中创build一个新的用户,并且只允许我创build一个数据库,比如dbTest。 什么是MySQL命令来做到这一点?

尝试这个:

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

如果您在同一台机器上运行访问MySQL的代码/站点,则hostname将是localhost。

现在,分解。

GRANT – 这是用于创build用户并授予数据库,表等的权限的命令。

ALL PRIVILEGES – 这告诉用户将拥有所有的标准特权。 但是,这不包括使用GRANT命令的权限。

dbtest.* – 这说明MySQL将这些权利用于整个dbtest数据库。 如果愿意,可以用特定的表名或存储例程replace*。

TO 'user'@'hostname' – 'user'是您正在创build的用户帐户的用户名。 注意:你必须在那里有单引号。 “主机名”告诉MySQL用户可以连接的主机。 如果你只想从同一台机器上使用localhost

IDENTIFIED BY 'password' – 正如你所猜测的那样,这为用户设置了密码。

句法

要在MySQL / MariaDB 5.7.6及更高版本中CREATE USER ,请使用CREATE USER语法 :

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

然后授予对数据库的所有访问权限(例如my_db ),使用GRANT语法 ,例如

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

ALLpriv_type )可以用SELECTINSERTUPDATEALTER等特定的权限来replace。

然后重新加载新分配的权限运行:

 FLUSH PRIVILEGES; 

执行

要运行上面的命令,需要运行mysql命令,并将其input到提示符中,然后使用quit命令或CtrlD进行注销。

要从shell运行,请使用-e参数(将SELECT 1replace为上述命令之一):

 $ mysql -e "SELECT 1" 

或从标准input中打印语句:

 $ echo "FOO STATEMENT" | mysql 

如果上面的Access拒绝 ,指定-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:

 # 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'" } 

创build用户并授予数据库的所有权限。

login到MySQL:

 mysql -u root 

现在创build并授予

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

匿名用户(仅限本地testing)

或者,如果您只想授予对数据库完全不受限制的访问权限(例如,在本地计算机上进行testing实例访问,则可以向匿名用户授予访问权限,如下所示:

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

您可以使用CREATE USER语句创build新用户,并使用GRANT授予他们权限。

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

忽略-p选项,如果mysql用户没有密码只需按“[Enter]”button旁路。 用花括号包围的string需要用实际值replace。

下面的命令将工作,如果你想创build一个新的用户,让他在本地主机上的所有访问特定的数据库(不是在你的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'; 
Interesting Posts