Как я могу создать базу данных на моем сервере из Интернета? - PullRequest
0 голосов
/ 23 марта 2009

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

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

CREATE DATABASE permission denied in database 'master'.

Мне удалось добавить базу данных (локально) несколькими способами. Это одна из самых простых рабочих версий:

tmpConn.ConnectionString = "Data Source=.\\SQLEXPRESS; DATABASE = master;Integrated Security=True;";
sqlCreateDBQuery = " CREATE DATABASE " + dbname;

SqlCommand myCommand = new SqlCommand(sqlCreateDBQuery, tmpConn);
try
{
    tmpConn.Open();
    myCommand.ExecuteNonQuery();

}
catch (System.Exception ex)
{}

Ответы [ 5 ]

3 голосов
/ 23 марта 2009

Я подозреваю, что любая учетная запись, которую вы используете для подключения к Sql Server, не имеет разрешений на CREATE DATABASE. Вы, вероятно, используете Integrated Security, которая будет использовать сетевую службу / ASP.NET для подключения к MSSQL. Вам необходимо создать новую строку подключения , которая использует аутентификацию Sql с учетными данными sa (или другого системного администратора).

О - и это будет работать локально, потому что вы запускаете его под Visual Studio WebDev.exe, который запускается с вашей локальной учетной записью пользователя - который, вероятно, настроен как системный администратор в MSSQL.

0 голосов
/ 23 марта 2009

Что еще никто не предложил, так это то, какую проверку вы выполняете для значения dbname. Вы уверены, что в нем нет пробелов? Что это не зарезервированное слово? Что он не содержит вредоносного кода? По крайней мере, вы должны заключить его в квадратные скобки:

sqlCreateDBQuery = String.Format(" CREATE DATABASE [{0}]", dbname);

Я действительно надеюсь, что вы не разрешаете пользователю вводить это имя прямо в текстовое поле где-нибудь. Даже если вы используете защиту свойств на начальном входе, а это происходит из какой-то общей базы данных «клиентов», вы можете настроить себя на уязвимость Sql Injection второго порядка.

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

0 голосов
/ 23 марта 2009

Проверьте разрешения для MySQL: у вашей учетной записи администратора разные настройки для локального соединения по сравнению с любым хостом?

0 голосов
/ 23 марта 2009

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

0 голосов
/ 23 марта 2009

Вам следует обратиться к поставщику услуг. (Или сопровождающий сервера).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...