首页 文章

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

提问于
浏览
514

我想在MySQL中创建一个新用户,并且只对一个数据库(例如 dbTest )提供完全访问权限,我使用 create database dbTest; 这样的命令创建 . 那些MySQL命令会做什么?

7 回答

  • 1

    对我来说这很有效 .

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

    哪里

    • spowner:用户名

    • 1234:spowner的密码

    • test:数据库'spowner'具有访问权限

  • 227

    语法

    要在MySQL / MariaDB 5.7.6及更高版本中创建用户,请使用CREATE USER syntax

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

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

    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
    

    Shell集成

    对于不熟悉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'"
    }
    
  • 13

    您可以使用CREATE USER语句创建新用户,并使用GRANT为其授予权限 .

  • 15

    如果您想要创建一个新用户,则可以使用以下命令为他提供对localhost上特定数据库(不是Mysql中的所有数据库)的所有访问权限 .

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

    这将在localhost上向该用户授予一个数据库 test_database (在您的情况下为 dbTest )的所有权限 .

    通过运行以下命令,检查上述命令向该用户发出的权限 .

    SHOW GRANTS FOR 'user'@'localhost'
    

    以防万一,如果要限制用户只能访问一个表

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

    创建用户并授予数据库的所有权限 .

    登录MySQL:

    mysql -u root
    

    现在创建并授予

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

    匿名用户(仅限本地测试)

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

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

    请注意

    这适用于开发中的垃圾数据 . 不要在你关心的任何事情上这样做 .

  • 2

    试试这个来创建用户:

    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' - 正如您所猜测的那样,这会为该用户设置密码 .

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

    忽略 -p 选项,如果mysql用户没有密码 or 只需按"[Enter]"按钮旁路即可 . 用大括号括起来的字符串需要替换为实际值 .

相关问题