private void SetupLowPrivilegeUserRightsFor(DiscoveredDatabase db, TestLowPrivilegePermissions permissions, ITableInfo ti) { var dbType = db.Server.DatabaseType; //get access to the database using the current credentials var username = TestDatabaseSettings.GetLowPrivilegeUsername(dbType); var password = TestDatabaseSettings.GetLowPrivilegePassword(dbType); if (string.IsNullOrWhiteSpace(username) || string.IsNullOrWhiteSpace(password)) { Assert.Inconclusive(); } //give the user access to the table var sql = GrantAccessSql(username, dbType, permissions); using (var con = db.Server.GetConnection()) UsefulStuff.ExecuteBatchNonQuery(sql, con); if (ti != null) { //remove any existing credentials foreach (DataAccessCredentials cred in CatalogueRepository.GetAllObjects <DataAccessCredentials>()) { CatalogueRepository.TableInfoCredentialsManager.BreakAllLinksBetween(cred, ti); } //set the new ones DataAccessCredentialsFactory credentialsFactory = new DataAccessCredentialsFactory(CatalogueRepository); credentialsFactory.Create(ti, username, password, DataAccessContext.Any); } }
/// <inheritdoc/> public void DoImport(out ITableInfo tableInfoCreated, out ColumnInfo[] columnInfosCreated) { var syntax = _tableValuedFunction.Database.Server.GetQuerySyntaxHelper(); var wrappedSchema = string.IsNullOrWhiteSpace(_schema) ? "" : syntax.EnsureWrapped(_schema); string finalName = syntax.EnsureWrapped(_database) + "." + wrappedSchema + "." + _tableValuedFunctionName + "("; foreach (DiscoveredParameter parameter in _parameters) { finalName += parameter.ParameterName + ","; } finalName = finalName.Trim(',') + ") AS " + _tableValuedFunctionName;//give it an alias so all the children ColumnInfos can be fully specified tableInfoCreated = new TableInfo(_repository, finalName); tableInfoCreated.Server = _server; tableInfoCreated.Database = _database; tableInfoCreated.IsTableValuedFunction = true; tableInfoCreated.Schema = _schema; tableInfoCreated.SaveToDatabase(); columnInfosCreated = CreateColumnInfosBasedOnReturnColumnsOfFunction(tableInfoCreated); var server = _tableValuedFunction.Database.Server; if (server.ExplicitUsernameIfAny != null) { var credentialsFactory = new DataAccessCredentialsFactory(_repository); credentialsFactory.Create(tableInfoCreated, server.ExplicitUsernameIfAny, server.ExplicitPasswordIfAny, _usageContext); } }
/// <inheritdoc/> public void DoImport(out TableInfo tableInfoCreated, out ColumnInfo[] columnInfosCreated) { string tableName; string databaseName; var querySyntaxHelper = _server.GetQuerySyntaxHelper(); tableName = querySyntaxHelper.EnsureWrapped(_importDatabaseName); if (_type == DatabaseType.MicrosoftSQLServer || _type == DatabaseType.PostgreSql) { tableName += "." + (_importFromSchema ?? querySyntaxHelper.GetDefaultSchemaIfAny()) + "."; } else if (_type == DatabaseType.MySql || _type == DatabaseType.Oracle) { tableName += "."; } else { throw new NotSupportedException("Unknown Type:" + _type); } tableName += querySyntaxHelper.EnsureWrapped(_importTableName); databaseName = querySyntaxHelper.EnsureWrapped(_importDatabaseName); DiscoveredColumn[] discoveredColumns = _server.ExpectDatabase(_importDatabaseName) .ExpectTable(_importTableName, _importFromSchema, _importTableType) .DiscoverColumns(); TableInfo parent = new TableInfo(_repository, tableName) { DatabaseType = _type, Database = databaseName, Server = _importFromServer, Schema = _importFromSchema, IsView = _importTableType == TableType.View }; parent.SaveToDatabase(); List <ColumnInfo> newCols = new List <ColumnInfo>(); foreach (DiscoveredColumn discoveredColumn in discoveredColumns) { newCols.Add(CreateNewColumnInfo(parent, discoveredColumn)); } tableInfoCreated = parent; columnInfosCreated = newCols.ToArray(); //if there is a username then we need to associate it with the TableInfo we just created if (!string.IsNullOrWhiteSpace(_username)) { DataAccessCredentialsFactory credentialsFactory = new DataAccessCredentialsFactory(_repository); credentialsFactory.Create(tableInfoCreated, _username, _password, _usageContext); } }