Строки соединения с БД только для чтения

Это походит на действительно глупый вопрос, но у меня был поиск вокруг, и я ничего не могу найти об этом.

У меня есть строка соединения с БД, которую я создаю в своем web.config:-

<connectionStrings>   
<add name="DBConn" connectionString="Data Source=<db svr>;Initial Catalog=<dbname>;Integrated Security=True" providerName="System.Data.SqlClient />   
</connectionStrings>

или

Data Source=<db svr>;Database=<db name>;User ID=<uname>;Password=<pword>;

но мне нужно это соединение, чтобы быть только для чтения. Я определил все свои объекты linq с, только входит в их свойства, и ни один из моих классов репозитория (MVC) не имеет.SubmitChanges () методы в них так, я на 99% уверен, что система не может обновить этот DB, но я также хотел бы установить свое соединение с БД, чтобы быть RO если вообще возможный. Я понимаю, что идеально это должно быть сделано в конце SQL-сервера, и пользователь должен быть сделан RO, но который (по различным причинам, из моего управления) не может быть сделан, таким образом, я хотел заблокировать вниз свое соединение, поскольку приложение не должно писать в DB.

Существует ли параметр "только для чтения", я могу обратиться к строке подключения так, чтобы это бросило бы ошибку или отбросило бы данные, если бы какие-либо обновления были предприняты?

Только для повторения (1-й ответ я имел, при выяснении у этого, на другом форуме, было "изменением учетные данные DB"), я не могу, всегда, изменить учетные данные доступа DB, это RW, и любая попытка изменить их (в настоящее время) разрушает DB SQL-сервера. Это не моя проблема, и я не могу посмотреть на решение того вопроса, так же вот почему я хочу посмотреть на создание соединения с БД RO как это абсолютно, положительно должен уничтожить каждый.... errr, я имею в виду абсолютно, положительно не может изменить данные DB.

Аплодисменты

MH

9
задан Mad Halfling 15 January 2010 в 10:26
поделиться

4 ответа

Под вашим контролем находятся классы доступа к коду (L2S). Я предлагаю переопределить в частичном классе SubmitChanges для вашего текста данных, чтобы ничего не делать ( или даже бросить ошибку!) (или реализовать все методы расширяемости InsertObject, UpdateObject или DeleteObject, которые принадлежат вашему тексту данных)

.
6
ответ дан 4 December 2019 в 11:41
поделиться

Нет, нет способа (о котором я знаю). К сожалению для вас, правильным способом сделать это было бы изменить разрешения текущего пользователя или создать нового пользователя только с привилегиями выбора. Я понимаю, что это не тот ответ, который вы ищете, но наличие Sql Server, который терпит крах, когда вы пытаетесь изменить вещи в нем, кажется проблемой, которая действительно стоит рассмотреть. Вы используете учетную запись «sa» для подключения? Если это так, необходимо создать другого пользователя и предоставить ему соответствующие разрешения.

-121--3294891-

Рекомендуется использовать cellspacing и cellpadding для атрибутов table тэгов или border-spacing css.

-121--825896-

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

Например,

SQL Server 2005 CE при использовании поставщика данных .NET Compact Framework для SQL Server Mobile имеет возможный параметр Режим = Read Only; . (см. на connectionstrings.com ).

SQL Server 2008, не .

Для получения дополнительной информации см. connectionstrings.com .

4
ответ дан 4 December 2019 в 11:41
поделиться

Нет ничего, что вы не можете сделать на уровне строки соединения, который предотвращает пишет, кроме изменения пользователя - который вы уже говорили, что не можете сделать.

В этом случае вам просто нужно сделать все возможное в вашем коде, чтобы предотвратить любые пишеты; I.E:

  • Любые общественные слои не должны выставлять обновление / удалить / вставить семантику или что-то еще.
  • Сделайте любые классы слоя данных, так что они не могут быть преодолены

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

Вы можете, следовательно, переместите соединительную строку где-то еще, что только внутренний код знает, как получить доступ (он все еще будет управленческим файлом, не используйте константу кода!); Это все еще не останавливает кого-либо использовать его - но это делает его намного сложнее.

(добавлено) Я должен объяснить, почему он не защищает его.

Оставляя в стороне, что источник самой строки соединения, вероятно, будет доступен даже путем защиты с библиотеками шифрования и т. Д., Ничто не останавливает меня, отражая вашему коду и позвонив ему, кроме уровней доверия. Вы можете пойти по всему маршруту запутанного пути, чтобы помешать мне деконструировать свой код; Но, конечно, этот уровень паранойи не требуется в вашем доме развития?

В конечном итоге, хотя, потому что это «SEP» (чужой проблемой), как вы его положили, и вы не контролируете это - если кто-нибудь спрашивает, почему, Несмотря на ваши лучшие усилия, вы не можете гарантировать , что не будет выполнено никаких писем, вы можете смело обвинить это «кто-то еще».

1
ответ дан 4 December 2019 в 11:41
поделиться

Нет, ни в коем случае (о чем я знаю). К сожалению для вас, правильным способом было бы изменить права текущего пользователя, или создать нового пользователя с только выбранными привилегиями. Я понимаю, что это не тот ответ, который вы ищете, но наличие Sql сервера, который выходит из строя, когда вы пытаетесь что-то изменить в нем, кажется, является проблемой, на которую действительно стоит обратить внимание. Это из-за того, что вы используете учетную запись "sa" для подключения? Если да, то вы должны создать другого пользователя и дать ему соответствующие права.

7
ответ дан 4 December 2019 в 11:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: