Управление чтением из базы данных, просмотрами или разрешениями в MySql - PullRequest
2 голосов
/ 06 марта 2010

У меня будет несколько таблиц, используемых разными проектами на одном и том же сервере mySql. Большая часть данных является конфиденциальной и должна находиться за стеной прав доступа. Однако многие из таблиц конфиденциальных данных основаны на таблицах нечувствительных данных для информации о пользователях и отделах. Поэтому я вижу перед собой три варианта и не уверен, какой из них выбрать.

Все в одной базе данных с разрешениями на уровне таблицы

Самое простое из всех решений, за исключением того, что я не контролирую разрешения на сервере базы данных, традиционно серверная команда делает только разрешения на уровне базы данных, и получение их для разрешения - это политическая битва. отслеживать все разрешения будет больно.

В нескольких базах данных с разрешениями уровня базы данных

Я могу разбить таблицы на зоны базы данных, поэтому вся информация о отделе, например, данные о сотрудниках, может быть в его собственной базе данных, а инструменты для редактирования данных о сотрудниках могут иметь доступ UPDATE & INSERT к базе данных отдела. Другие инструменты могут захотеть получить доступ к частям списка персонала, общедоступный каталог персонала имеет доступ SELECT к таблицам персонала, но части таблиц персонала должны оставаться закрытыми, например, личные контактные данные, коды копирования или индексы выставления счетов. Мне нужно было бы разделить таблицы персонала на публичные или частные таблицы, но я бы снова застрял с разрешениями на уровне таблицы. Поэтому мне нужно разделить базу данных отдела на общие и частные базы данных отдела.

Кросс-базы данных Я бы создал представления в базе данных, которая извлекает данные из других баз данных, к которым у учетной записи нет доступа. Таким образом, я могу поместить всю информацию о персонале в базу данных отдела, а затем создать представление в веб-базе данных, которое извлекает только те столбцы, которые должны быть общедоступными (имя, отдел, расширение). Это позволило бы мне на самом деле иметь права SELECT на уровне столбцов без необходимости копаться с разрешениями. Мое беспокойство будет скорость. Исходная таблица, из которой извлекаются данные, будет полностью проиндексирована, но документация кажется противоречивой, будут ли индексироваться столбцы при запросе представления.

Кто-нибудь еще использовал любой из этих трех вариантов? У тебя есть лучшие, о которых я не думал? Какие подводные камни вы можете увидеть помимо того, что я указал для любого из вариантов?

1 Ответ

1 голос
/ 06 марта 2010

Представления и хранимые процедуры - ваш лучший выбор.Представления могут быть использованы для предоставления общего доступа, но если некоторые запросы не выполняются, переписать их, чтобы использовать хранимые процедуры, минуя представление для производительности.

...