【发布时间】:2019-11-03 06:52:00
【问题描述】:
有没有办法为无权访问master的用户使用SMO?
我正在通过 SMO 编写 Azure SQL 数据库的 DLL。我使用具有 db_owner 角色的包含用户来访问 db 和 DDL,但它会引发异常。 SMO 在我创建 ServerConnection 后立即尝试默认为 master,其中包含的用户没有权限。
我在 .NET Core 3.0 中使用了在 nuget 和代码上发布的最新 SMO 版本。
--exec in master db
CREATE LOGIN testuser WITH PASSWORD='...';
--exec in user db: testsqldb
CREATE USER testuser FROM LOGIN testuser
ALTER ROLE db_owner ADD MEMBER testuser
连接字符串有InitialCatalog = testsqldb
var connectionStringBuilder = new SqlConnectionStringBuilder(sourceConnectionString);
var serverConnection = CreateServerConnection(_connectionString);
//this throws exception
var server = new Server(serverConnection);
异常详情
{"The server principal \"testuser\" is not able to access the database \"master\" under the current security context.\r\nCannot open user default database. Login failed.\r\nLogin failed for user 'testuser'."}
我希望 ServerConnection 遵守 ConnectionString 中指定的 InitialCatalog,而不是默认为 'master'
【问题讨论】: