Я посмотрел бы на тех клиентов более тяжелого использования прямо сейчас. Можно ли заряжать их больше? Является их использование больше, чем это должно быть? Можно ли помочь им оптимизировать свои системы так, чтобы они не должны были делать такое тяжелое использование? Можно ли добавить ограничение уровня к API? Их использования достаточно, чтобы смочь предоставить им их собственный сервер и заряжать их соответственно?
Следующий шаг должен посмотреть на Вашу архитектуру. У Вас есть кэширующиеся прокси перед Вашими веб-серверами? У Вас есть отдельные серверы баз данных? Все Ваши серверы оптимизированы, а также Ваш код? Вы кэшируете абсолютно все, что Вы возможно можете? У Вас есть хорошие аппаратные средства?
После того как Вы уверены, что Ваша архитектура максимально оптимизирована, действительно просто необходимо добавлять дополнительные поля к установке выравнивания нагрузки каждый раз, когда Вы начинаете поражать пределы (является ли это дополнительными кэшами, дополнительные веб-серверы или дополнительные серверы бэкэнда будут зависеть, на каких пределах Вы совершаете нападки).
Вот концептуальный пример
Предположим, вы хотите создать список пользователей
, где каждый пользователь будет обращаться к example.com с этими префиксами
, и каждому пользователю должны быть предоставлены
INSERT, UPDATE, DELETE, SELECT
а пароль для пользователей - «независимо»
Вот чистый запрос MySQL Query
select CONCAT('GRANT ',Grants,' TO ''',User,'''@''',Host,'.example.com'' IDENTIFIED BY PASSWORD ''',pwd,''';') GrantCommand
from
(select "INSERT,UPDATE,DELETE,SELECT ON *.*" Grants) G,
(SELECT PASSWORD('whateveriwant') pwd) P,
(
select 'user1' User
union select 'user2'
union select 'user3'
union select 'user4'
union select 'user5'
union select 'user6'
union select 'user7'
union select 'user8'
union select 'user9'
union select 'user10'
) U,
(
select 'abc.foo' Host
union select 'def.bar'
union select 'ghi.baz'
) H
;
Вот тот чистый MySQL запрос, выполняемый в MySQL Client
mysql> select CONCAT('GRANT ',Grants,' TO ''',User,'''@''',Host,'.example.com'' IDENTIFIED BY PASSWORD ''',pwd,''';') GrantCommand
-> from
-> (select "INSERT,UPDATE,DELETE,SELECT ON *.*" Grants) G,
-> (SELECT PASSWORD('whateveriwant') pwd) P,
-> (
-> select 'user1' User
-> union select 'user2'
-> union select 'user3'
-> union select 'user4'
-> union select 'user5'
-> union select 'user6'
-> union select 'user7'
-> union select 'user8'
-> union select 'user9'
-> union select 'user10'
-> ) U,
-> (
-> select 'abc.foo' Host
-> union select 'def.bar'
-> union select 'ghi.baz'
-> ) H
-> ;
+------------------------------------------------------------------------------------------------------------------------------------------------+
| GrantCommand |
+------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user1'@'abc.foo.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user1'@'def.bar.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user1'@'ghi.baz.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user2'@'abc.foo.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user2'@'def.bar.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user2'@'ghi.baz.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user3'@'abc.foo.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user3'@'def.bar.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user3'@'ghi.baz.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user4'@'abc.foo.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user4'@'def.bar.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user4'@'ghi.baz.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user5'@'abc.foo.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user5'@'def.bar.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user5'@'ghi.baz.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user6'@'abc.foo.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user6'@'def.bar.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user6'@'ghi.baz.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user7'@'abc.foo.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user7'@'def.bar.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user7'@'ghi.baz.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user8'@'abc.foo.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user8'@'def.bar.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user8'@'ghi.baz.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user9'@'abc.foo.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user9'@'def.bar.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user9'@'ghi.baz.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user10'@'abc.foo.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user10'@'def.bar.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
| GRANT INSERT,UPDATE,DELETE,SELECT ON *.* TO 'user10'@'ghi.baz.example.com' IDENTIFIED BY PASSWORD '*2BE1C8DCB5977386CFE99E3BE97EEFA7510786BA'; |
+------------------------------------------------------------------------------------------------------------------------------------------------+
30 rows in set (0.00 sec)
mysql>
Просто поместите этот запрос в текстовый файл, например / root /MakeBulkUserGrants.sql[1228 visibleТогда просто запустите
mysql -uroot -hlocalhost -p < /root/MakeBulkUserGrants.sql > /root/BulkUserGrants.sql
Попробуйте !!!
Самое близкое, что я знаю к тому, о чем вы спрашиваете, - это проект Securich . Он создает набор хранимых процедур и помощников, которые можно использовать для создания псевдоролей и управления множеством привилегий в MySQL. Обратите внимание, что я сам этим не пользовался; Я только что с интересом смотрел сообщения в блоге. Вы можете прочитать больше на http://mysqlpreacher.com/wordpress/tag/securich/ . Он также был представлен в прошлом году на конференции MySQL: http://en.oreilly.com/mysql2011/public/schedule/detail/17372 , хотя я не могу найти слайд-колоду, и Шери К. Кабрал упомянула об этом в своем выступлении на IOUG Collaborate: http://technocation.org/files/doc/MySQLSecurity2011_06.pdf
Прежде всего, я бы рекомендовал отключить разрешение DNS в вашей конфигурации mysql. (опция пропуска имени) Если вы настраиваете гранты через полное доменное имя (abc.bcd.example.com) вместо IP, у вас могут возникнуть проблемы, когда DNS-запрос не может быть запущен вовремя, и пользователь не сможет воспользоваться привилегией, которую вы ему предоставили (или, если это приложение).
Кроме того, время соединения будет намного быстрее при использовании пропуска имени-разрешения, при загрузке mysql вы не можете жить без этой опции.
Для 100 грантов я бы использовал сценарий оболочки, чтобы добавить привилегии, и если вы хотите запросить их, используйте pt-show-grants, часть Percona Toolkit.
Надеюсь, это поможет