我的网站有一个管理员帐户,我添加了新客户端。添加新客户端后,他们会获得一个帐户和他们自己的数据库。
问题是我无法从我的管理员帐户在我的服务器上创建新数据库。在本地运行时,我可以在本地添加数据库。但是,当我尝试添加到服务器上运行我的网站的服务器时,我得到了
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)
{}
答案 0 :(得分:3)
我怀疑您用于连接到Sql Server的任何帐户都没有CREATE DATABASE的权限。您可能正在使用集成安全性,它将使用网络服务/ ASP.NET连接到MSSQL。您需要创建一个使用带有sa(或其他系统管理员)凭据的Sql身份验证的new connection string。
哦 - 这可以在本地运行,因为你在Visual Studio的WebDev.exe下运行它,它使用你的本地用户帐户运行 - 可能在MSSQL中设置为sysadmin。
答案 1 :(得分:0)
您应该联系您的服务提供商。 (或服务器的维护者)。
答案 2 :(得分:0)
您需要创建数据库并创建数据库用户权限。您的服务提供商应该能够为此提供便利。
答案 3 :(得分:0)
没有人建议的是你在dbname
值上做了什么样的验证。你确定它没有空格吗?这不是一个保留字吗?它不包含恶意代码?至少你应该用括号括起来:
sqlCreateDBQuery = String.Format(" CREATE DATABASE [{0}]", dbname);
我真的希望你不允许用户直接在某个文本框中输入这个名字。即使您在初始输入上使用属性安全性并且从某种常见的“客户端”数据库中撤回,您可能会为自己设置二阶Sql Injection漏洞。
之后你已经解决了这个问题,我们可以在这里查看错误信息。在这种情况下,问题是您的Web用户没有适当的CREATE权限。你需要纠正它,它应该允许你继续。您可能希望为此切换到此时保留一个特殊帐户,因此您的应用程序通常不会在允许此类操作的上下文中运行。
答案 4 :(得分:-1)
检查MySQL的权限:您的管理员帐户是否对本地连接与任何主机有不同的设置?