我如何允许用户通过存储的mysql过程创建数据库

时间:2018-12-17 19:41:14

标签: php mysqli

我需要在我的应用程序中设置一个具有“执行”权限的有限权限的“管理员帐户”。因此,我的逻辑是:

  1. 我有几个用户,其中一个被硬编码为应用程序(我的客户端)的主要管理员。

  2. 有多个用户,每个用户都可以登录系统中许多客户端级数据库之一(不能同时登录)。这些用户中的每个用户都会自动分配一个相同的预先创建的(standard_client)mysql用户帐户,用于在任何客户端级数据库上进行基本CRUD操作。

  3. 管理员拥有自己的管理员数据库和具有“执行”权限的mysql用户帐户。

我想做的就是让管理员能够创建一个全新的数据库,并将standard_client mysql用户帐户分配给该新数据库。我不想通过我的应用程序向他公开DB管理员的烦恼。所以我写了一个存储过程,它将创建一个标准的预先设计的数据库模式,我希望管理员只执行这个过程。此外,他应该能够获得整个应用程序的概述,即查看应用程序中的所有客户端数据表,并查看分配给每个数据表的用户等。

所有用户帐户都可以正常设置,数据库和存储过程都可以。但是,在给admin从phpMyAdmin(编写过程的位置)进行测试时,我无法找到一种使用输入变量的方法,该变量将保留正在创建的新数据表的名称。在测试'IN'变量时,即使被反引号包围也被解释为字符串文字。我是否必须使用PHP在我的应用程序中创建整个过程?如果是这样,我是否转义反引号,或者我假设它们是通过SQL并置而保留它们,那么$ new_db_name将被安全地解释,是的?

BEGIN
DROP DATABASE IF EXISTS `newDbName`;
CREATE DATABASE IF NOT EXISTS `newDbName` COLLATE 'utf8_general_ci';
END

My IN parameter is 'newDbName' varchar(80)

0 个答案:

没有答案