我将通过C程序向MySQL添加一个用户。我将在MySQL中完成最后一年的项目。如果我问错了,别误会我。我对这个概念有一个疑问,那就是我们可以添加一个具有根用户权限的新用户。在那之后,我们是否需要根用户的注销。如果是,如何注销根目录。
//header files inclusion
int main(void)
{
//declared MYSQL,MYSQL_REs,MYSQL_ROW variables.
// here declared username,pwd,localhost,databasename
// here declared variable to query
con = mysql_init(NULL);
/* connection to database */
if(!mysql_real_connect(con,server,username,password,database,0,NULL,0)) {
{
printf("error in connection\n");
exit(1);
}
printf("\n Enter the username to create a user in DB\n");
scanf("%s",name);
printf("\n Enter password \n");
scanf("%s",pwd);
sprintf(sql_addUser,"create user '%s'@'localhost' identified by '%s';",name,pwd);
mysql_query(con,sql_addUser);
sprintf(sql_grantAcc,"grant INSERT on '%s'.* to '%s'@'localhost';",databse,name);
mysql_query(con,sql_grantAcc);
所以我们在根模式下创建了一个用户。然后我需要使用新创建的用户进入MySQL,这样我可能需要注销或关闭连接。请给我一个如何改变用户模式的解决方案。
我假设要更改用户模式,我们需要关闭已建立的连接,这是不是正确的?
mysql_free_result(result);
mysql_close(con);
con = mysql_init(NULL);
if(!mysql_real_connect(con,server,name,pwd,database,0,NULL,0)) {
{
printf("error in connection\n");
exit(1);
}
最佳答案
如果您希望使用mysql_real_connect(),我认为最好在尝试以不同用户身份重新打开之前关闭连接,因为mysql_real_connect()的API描述没有描述它如何处理这种情况(可能可以工作,但可以在mysql服务器上保持进程打开,等待超时)。
但是,您可以使用API的mysql_change_user()调用。
语法:
my_bool mysql_change_user(MYSQL *mysql, const char *user, const char *password, const char *db)
更多信息请参见各自的api描述here,它是从MySQL 3.23.3开始实现的。