Когда я использовал для поддержки InterBase, этот вопрос возникал время от времени. Причина, по которой клиенты хотели использовать эту функцию, заключается в том, чтобы защитить свои инвестиции в «интеллектуальную собственность», то есть в исходный код, при разработке коммерческих программных приложений.
Конечно, вы можете ограничить доступ к исходному коду скомпилированного языка, такого как C ++, Java или Delphi. Клиент может перепроектировать скомпилированный код и изучить что-то из ваших алгоритмов, но это не то же самое, что иметь доступ к исходному коду. Существует много информации, которую они не получают при декомпиляции.
Но если вы внедрите части своего приложения в тела триггеров и хранимых процедур, они будут доступны для чтения любому покупателю, который покупает программный продукт. Могут быть способы скрыть или зашифровать этот код, но это не может быть необратимое шифрование, иначе ядро базы данных не сможет выполнить код.
InterBase сохранил копию источника триггера / процесса в поле BLOB и скомпилированную версию той же процедуры в другом BLOB. Таким образом, вы можете обнулить поле BLOB, содержащее исходный код, и оставить скомпилированный код. Но это так же эффективно, как отправка скомпилированного кода приложения; он все еще может быть реконструирован пиратом с достаточным умением и мотивацией.
Я не знаю, возможен ли трюк NULL-out-the-source-BLOB в MySQL или PostgreSQL.
Нижняя строка:
Нет способа полностью ограничить доступ к данным или метаданным в базе данных после того, как вы передадите их клиенту.
И стоит отметить, что это искусственное требование. Я никогда не слышал о том, чтобы кто-то украл свой программный IP-адрес из-за читаемого кода в триггерах и хранимых процедурах. Это не обязательно в любом случае. Пират может использовать другие средства для дублирования вашего программного обеспечения.