Действительно ли возможно указать MySQL глобальные полномочия для определенной таблицы во всех базах данных?

Я не знаком с Облаком Ubuntu, поэтому возьмите это с огромной мелкой частицей соли. GlusterFS может быть настроен для обеспечения, устройство хранения данных как Вы хотят. Может быть производительность, вовлекает для того, чтобы сделать это также.

При попытке израсходовать каждый последний небольшой гигабайт, Вы уехали, время, вероятно, для нового HD (или три). Если Вы просто ищете кластерную файловую систему, таким образом, VMs может быть возвращен вокруг к различным хостам легко, Gluster, вероятно, что Вы ищете.

2
задан 13 March 2012 в 18:03
1 ответ

Возможно, вам придется взломать его, используя таблицы схемы mysql, чтобы предоставить необходимые вам гранты:

Прежде всего, вот описание mysql.tables_priv

mysql> show create table mysql.tables_priv\G
*************************** 1. row ***************************
       Table: tables_priv
Create Table: CREATE TABLE `tables_priv` (
  `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  `User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Table_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Grantor` char(77) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `Table_priv` set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') CHARACTER SET utf8 NOT NULL DEFAULT '',
  `Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8 NOT NULL DEFAULT '',
  PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`),
  KEY `Grantor` (`Grantor`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Table privileges'
1 row in set (0.00 sec)

mysql>

Возможно, вам придется собрать все базы данных, которые имеют mytable и добавляют строку '.mytable'

SELECT CONCAT(table_schema,'.',table_name) my_table
FROM information_schema.tables WHERE table_name = 'mytable';

Затем возьмите этот список и создайте соответствующее разрешение для этого списка таблиц для каждого конкретного пользователя

SELECT CONCAT('GRANT ALL PRIVILEGES ON ',my_table,' TO ',userhost,';') SQLGrantCommand
FROM
(
    SELECT CONCAT('''',user,'''.''',host,'''') userhost
    FROM mysql.user WHERE user NOT IN ('','root')
) user_list,
(
    SELECT CONCAT(table_schema,'.',table_name) my_table
    FROM information_schema.tables WHERE table_name = 'mytable';
) table_list;

. Вы должны взять этот запрос и экспортировать его в текст файл с именем /root/GlobalTableGrants.sql

mysql -uroot -A --skip-column-names -e"SELECT CONCAT('GRANT ALL PRIVILEGES ON ',my_table,' TO ',userhost,';') SQLGrantCommand FROM (SELECT CONCAT('''',user,'''.''',host,'''') userhost FROM mysql.user WHERE user NOT IN ('','root')) user_list,(SELECT CONCAT(table_schema,'.',table_name) my_table FROM information_schema.tables WHERE table_name = 'mytable') table_list" > /root/GlobalTableGrants.sql

. Теперь просто войдите в систему, чтобы запустить этот сценарий mysql

mysql> source /root/GlobalTableGrants.sql

После запуска сценария сделайте следующее

SELECT * FROM mysql.tables_priv WHERE table_name = 'mytable'\G

Вы должны видеть каждое вхождение my_table с включенными привилегиями уровня таблицы. попробуйте !!!

2
ответ дан 3 December 2019 в 11:59

Теги

Похожие вопросы