创建用户指令:
CREATE USER '用户名'@'范围' IDENTIFIED BY '密码';
范围包括:ip、localhost、%
ip 即只能从指定地址登录
localhost 即只能从本机登录
% 即可以从任何地址登录
创建用户后需要为用户授权,才可操作数据库
授权指令:
GRANT privileges ON databasename.tablename TO '用户名'@'范围'
privileges 可以是:
SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,EXECUTE,INDEX,REFERENCES
ALTER ROUTINE,CREATE ROUTINE,CREATE TEMPORARY,SHOW VIEW,LOCK TABLES
ALL
databasename 是库的名称,可以填入 * 表示所有
tablename 是表的名称,可以填入 * 表示所有
撤销权限指令:
REVOKE 权限 ON databasename.tablename FROM '用户名'@'范围'
代码范例:
MYSQL* mysql = new MYSQL();
MYSQL* pDB = mysql_init(mysql);
if (pDB == NULL) {
std::cout << "mysql_init failed" << std::endl;
return -1;
}
pDB = mysql_real_connect(pDB, "localhost", "root", "root", "mysql", 3306, NULL, 0);
if (pDB) {
// 创建用户
std::string sql = "CREATE USER 'hello'@'localhost' IDENTIFIED BY '123456'";
int ret = mysql_real_query(mysql, sql.c_str(), (unsigned long)sql.size());
if (ret != 0) {
std::cout << "mysql error: " << mysql_error(pDB) << std::endl;
return -1;
}
MYSQL_RES* res = mysql_use_result(mysql);
if (res) {
show_result(res);
mysql_free_result(res);
}
// 对新创建的用户进行授权 赋予该用户所有数据库的所有表的所有权限
sql = "GRANT ALL ON *.* TO 'hello'@'localhost'";
ret = mysql_real_query(mysql, sql.c_str(), (unsigned long)sql.size());
if (ret != 0) {
std::cout << "mysql error: " << mysql_error(pDB) << std::endl;
return -1;
}
res = mysql_use_result(mysql);
if (res) {
show_result(res);
mysql_free_result(res);
}
mysql_close(pDB);
std::cout << pDB << std::endl;
delete mysql;
}
mysql = nullptr;
执行后可以看到新的用户hello
可以看到用户的权限