Если я правильно помню, ключевое слово internal
предназначено именно для таких типов ситуаций.
Редактировать: Как сказано в комментариях, если class A
в assembly B
, то class C in assembly D
не будет иметь доступа к A
.
Кроме того, как указано в других ответах, вы можете (и, вероятно, должны) иметь некоторую форму аутентификации в ClearDatabase()
.
Редактировать 2: Меня только что осенило, что такого рода разрешения должны быть на уровне базы данных, что означает, что если следующий пользователь (с такими привилегиями):
A: Insert, Update, Create
попытался Drop Table
, тогда приложение сгенерирует исключение (или как бы вы ни обрабатывали ошибки), что, очевидно, помешало бы им просто сделать это.
Это не означает, что вы не должны устанавливать ClearDatabase()
в качестве internal
, но если пользователь (который использует стороннее устройство) имеет разрешения на Drop Table
, то он / она сможет независимо.
Редактировать 3:
The problem is not how to secure your code, the problem is how to secure your database.
– Huusom