Как я могу разрешить пользователям sql-доступ к таблице, ограниченной определенными строками?

Я строю игру для имитации фондовой биржи. У меня есть таблица под названием «Market_data», и в игровых играх имитируются те, которые относятся к конкретным датам, и им разрешено использовать SQL-запросы для извлечения исторических данных и планирования их действия. Моя трудность заключается в том, что мне нужно ограничить доступ к строкам, которые они могут получить, исходя из текущей даты, на которой они играют, поэтому они не могут видеть строки с датой, большей, чем текущая дата.

Например: пользователь запускает игру и в настоящее время находится в 2010 году, если он делает простой выбор типа "SELECT * FROM market_data" я не хочу, чтобы он видел строки с Date> 'xx-2010'

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

Решение – это SQL-представления, представления используются по нескольким причинам:

* 1. * Чтобы скрыть сложность данных. Вместо того, чтобы заставлять ваших пользователей изучать синтаксис JOIN T-SQL, вы можете указать представление, которое запускает обычно запрашиваемую инструкцию SQL.

* 2. * Для защиты данных. Если у вас есть таблица, содержащая конфиденциальные данные в определенных столбцах, вы можете скрыть эти столбцы от определенных групп пользователей. Например, имена клиентов, адреса и номера их социального обеспечения могут храниться в одной и той же таблице; однако для сотрудников нижнего уровня, таких как судоходные клерки, вы можете создать представление, которое отображает только имя и адрес клиента. Вы можете предоставить разрешения для представления, не позволяя пользователям запрашивать базовые таблицы. Существует несколько способов защитить ваши данные:

a. Создайте представление, позволяющее читать только определенные столбцы из таблицы. Общим примером этого может служить столбец зарплаты в таблице сотрудников. Возможно, вы не захотите, чтобы весь персонал мог читать зарплату менеджера или друг друга. Это называется разделением таблицы по вертикали и выполняется путем указания только соответствующих столбцов в инструкции CREATE VIEW.

b. Создайте представление, позволяющее читать только определенные строки из таблицы. Например, у вас может быть мнение для менеджеров отделов. Таким образом, каждый менеджер может предоставлять рейзы только сотрудникам своего отдела. Это называется горизонтальным разделением и выполняется путем предоставления предложения WHERE в инструкции SELECT, которая создает представление.

* 3. * Применение некоторых простых бизнес-правил. Например, если вы хотите создать список клиентов, которым необходимо получить каталог падения, вы можете создать представление о клиентах, которые ранее покупали ваши рубашки во время падения.

* 4. * Экспорт данных с BCP. Если вы используете BCP для экспорта данных SQL Server в текстовые файлы, вы можете отформатировать данные через представления, поскольку способность форматирования BCP довольно ограничена.

* 5. * Настройка данных. Если вы хотите отобразить некоторые вычисленные значения или имена столбцов, отформатированные иначе, чем столбцы базовой таблицы, вы можете сделать это, создав представления.

ссылка взята из http://sqlserverpedia.com .

1) Вы можете использовать mysql proxy http://dev.mysql.com/downloads/mysql-proxy/ с настраиваемыми правилами, ограничивающими доступ.

2) Вы можете использовать хранимые процедуры / функции

3) Вы можете использовать представления

Основной способ:

-> Предотвратить доступ пользователя (или группы) к базовой таблице.

-> Определить представление поверх этой таблицы, которое отображает только строки, которые должны видеть эти пользователи.

-> Дайте этим пользователям разрешение SELECT для представления.

-> И вы также можете использовать концепцию SQL Encryption, Decryption and Hashing.

Примеры шифрования и дешифрования можно найти здесь:

http://msdn.microsoft.com/en-us/library/ms179331.aspx

Пример хэширования можно найти здесь:

http://msdn.microsoft.com/en-us/library/ms174415.aspx