Конкретный пример, который вы приводите:
Например, два элемента * p1 и * p2 имеют свойство p2 = p1 + 1 или p1 = p2 + 1, если и только если они смежные в физической памяти?
выйдет из строя на платформах, которые не имеют плоского адресного пространства, таких как PIC . Чтобы получить доступ к физической памяти на PIC, вам нужны и адрес, и номер банка, но последний может быть получен из внешней информации, такой как конкретный исходный файл. Таким образом, выполнение арифметики с указателями из разных банков даст неожиданные результаты.
Вам НЕ нужно беспокоиться о том, что у них есть доступ к инструменту. Просто убедитесь, что они не знают ни одного входа в систему SQL для конкретных баз данных, у которых есть разрешения на чтение / запись; если они есть, измените пароль. Если у них есть доступ к БД через аутентификацию Windows, убедитесь, что они находятся в роли носителя данных . Вы можете использовать роли для управления тем, что пользователи могут делать в SQL.
Вы можете использовать команду ЗАПРЕТИТЬ ПРОСМОТРЕТЬ ЛЮБУЮ БАЗУ ДАННЫХ для определенных пользователей. Это новая функция, доступная в SQL Server 2008.
Она не позволяет пользователю видеть системный каталог (sys.databases, sys.sysdatabases и т. Д.) И, следовательно, делает БД невидимой для них в SQL Management Studio (SSMS). .
Выполните эту команду из главной базы данных:
DENY VIEW ANY DATABASE TO 'loginName'
Пользователь все еще может получить доступ к базе данных через ваше приложение. Однако, если они входят в систему через SSMS, ваша база данных не будет отображаться в списке баз данных, а если они откроют окно запроса, ваша база данных не появится в раскрывающемся списке.
Однако это не является надежным. Если пользователь достаточно умен, чтобы запустить команду запроса:
USE <YourDatabaseName>
, тогда он увидит базу данных в анализаторе запросов.
Поскольку это решение дает вам 90% результатов,
Я бы посоветовал вам заблокировать базу данных и дать пользователю соответствующие права только для чтения (или другие). Таким образом, пользователь может по-прежнему использовать Management Studio для выполнения запросов на выборку и т. Д.
Если вы не хотите, чтобы пользователь вообще имел какие-либо права, вы также можете это сделать.
Если ваше приложение использует только хранимые процедуры для изменения данных, вы можете предоставить конечным пользователям доступ для запуска хранимых процедур, но запретить им доступ для изменения таблиц.
Если ваше приложение работает как учетная запись службы / пользователя, то только эта учетная запись требует доступа к базе данных. Индивидуальные пользователи учетной записи не требуют доступа к базе данных, и поэтому у них даже не будет доступа для чтения. Ваше приложение будет шлюзом к данным.
Если пользователи запускают приложение под своими учетными записями, предоставьте им разрешение только на чтение. Вы можете просто добавить их к роли db_datareader.
Надеюсь, это поможет!
Роль приложения позволит вам защитить объекты базы данных для вашего приложения вместо вошедшего в систему пользователя.
I agree with Jon Erickson as a general rule
Хорошо используйте роли базы данных, если пользователи должны иметь только доступ SELECT (чтение), назначьте им роль db_datareader. Даже если они войдут в систему с использованием SSMS, они смогут выполнять только операторы SELECT.