/// <inheritdoc/>
        public void CreateLinkBetween(DataAccessCredentials credentials, TableInfo tableInfo, DataAccessContext context)
        {
            using (var con = _repository.GetConnection())
            {
                var cmd = DatabaseCommandHelper.GetCommand("INSERT INTO DataAccessCredentials_TableInfo(DataAccessCredentials_ID,TableInfo_ID,Context) VALUES (@cid,@tid,@context)", con.Connection, con.Transaction);
                cmd.Parameters.Add(DatabaseCommandHelper.GetParameter("@cid", cmd));
                cmd.Parameters["@cid"].Value = credentials.ID;

                cmd.Parameters.Add(DatabaseCommandHelper.GetParameter("@tid", cmd));
                cmd.Parameters["@tid"].Value = tableInfo.ID;

                cmd.Parameters.Add(DatabaseCommandHelper.GetParameter("@context", cmd));
                cmd.Parameters["@context"].Value = context;
                cmd.ExecuteNonQuery();
            }
        }
Esempio n. 2
0
        public void DataAccessCredentialsEncryption()
        {
            //cleanup
            foreach (var c in CatalogueRepository.GetAllObjects <DataAccessCredentials>().Where(c => c.Name.Equals("frankieFran")))
            {
                c.DeleteInDatabase();
            }

            DataAccessCredentials creds = new DataAccessCredentials(CatalogueRepository, "frankieFran");

            try
            {
                //as soon as you set a password it should be encrypted by the credentials class in memory
                creds.Password = "******";
                Assert.AreNotEqual("fish", creds.Password);
                Assert.AreEqual("fish", creds.GetDecryptedPassword());//but we should still be able to decrypt it

                //save it
                creds.SaveToDatabase();
                using (var con = CatalogueRepository.GetConnection())
                {
                    string value;
                    using (var cmd = DatabaseCommandHelper.GetCommand("Select Password from DataAccessCredentials where Name='frankieFran'", con.Connection, con.Transaction))
                        value = (string)cmd.ExecuteScalar();

                    //ensure password in database is encrypted
                    Assert.AreNotEqual("fish", value);
                    Assert.AreEqual(creds.Password, value);//does value in database match value in memory (encrypted)
                }

                //get a new copy out of the database
                DataAccessCredentials newCopy = CatalogueRepository.GetObjectByID <DataAccessCredentials>(creds.ID);
                Assert.AreEqual(creds.Password, newCopy.Password); //passwords should match
                Assert.AreNotEqual("fish", creds.Password);        //neither should be fish
                Assert.AreNotEqual("fish", newCopy.Password);

                //both should decrypt to the same value (fish
                Assert.AreEqual("fish", creds.GetDecryptedPassword());
                Assert.AreEqual("fish", newCopy.GetDecryptedPassword());
            }
            finally
            {
                creds.DeleteInDatabase();
            }
        }
Esempio n. 3
0
 public ActionResult Login(FormCollection form)
 {
     if (ModelState.IsValid)
     {
         string                name      = form["name"];
         string                password  = form["pwd"];
         string                logintype = form["ltype"];
         List <Admin>          user      = new List <Admin>();
         DataAccessCredentials dac       = new DataAccessCredentials();
         AdminProfile          ap        = new AdminProfile();
         user = ap.LoginCheck(name, name, password, logintype);
         if (user != null)
         {
             return(this.RedirectToAction("Main", "Admin"));
         }
     }
     return(View());
 }
Esempio n. 4
0
        public void GetConnectionStringFromCatalogueWhereOneTableInfoUsesACredentialsOverride()
        {
            Catalogue     c   = new Catalogue(CatalogueRepository, "GetConnectionStringFromCatalogueWhereOneTableInfoUsesACredentialsOverride");
            CatalogueItem ci  = new CatalogueItem(CatalogueRepository, c, "GetConnectionStringFromCatalogueWhereOneTableInfoUsesACredentialsOverride");
            TableInfo     t   = new TableInfo(CatalogueRepository, "Test");
            ColumnInfo    col = new ColumnInfo(CatalogueRepository, "[mydatabase].dbo.test.col", "varchar(10)", t);

            var extractionInformation = new ExtractionInformation(CatalogueRepository, ci, col, col.Name);

            DataAccessCredentials cred = null;

            try
            {
                t.Server   = "myserver";
                t.Database = "mydatabase";

                cred          = new DataAccessCredentials(CatalogueRepository, "bob");
                cred.Username = "******";
                cred.Password = "******";

                Assert.AreNotEqual("pass", cred.Password);
                Assert.AreEqual("pass", cred.GetDecryptedPassword());


                cred.SaveToDatabase();
                t.SetCredentials(cred, DataAccessContext.InternalDataProcessing);
                t.SaveToDatabase();

                var constr = (SqlConnectionStringBuilder)c.GetDistinctLiveDatabaseServer(DataAccessContext.InternalDataProcessing, false).Builder;
                Assert.AreEqual("myserver", constr.DataSource);
                Assert.False(constr.IntegratedSecurity);
                Assert.AreEqual("bob", constr.UserID);
                Assert.AreEqual("pass", constr.Password);
            }
            finally
            {
                t.DeleteInDatabase();
                if (cred != null)
                {
                    cred.DeleteInDatabase();
                }
                c.DeleteInDatabase();//no need to delete ci because of cascades
            }
        }
Esempio n. 5
0
            public void Create(CatalogueRepository repository, DiscoveredDatabase database,
                               ILoadDirectory directory)
            {
                TableInfo = new TableInfo(repository, "TestData")
                {
                    Server   = database.Server.Name,
                    Database = database.GetRuntimeName()
                };
                TableInfo.SaveToDatabase();

                if (!string.IsNullOrWhiteSpace(database.Server.ExplicitUsernameIfAny))
                {
                    Credentials = new DataAccessCredentialsFactory(repository).Create(TableInfo,
                                                                                      database.Server.ExplicitUsernameIfAny, database.Server.ExplicitPasswordIfAny,
                                                                                      DataAccessContext.Any);
                }


                ColumnInfo = new ColumnInfo(repository, "Col1", "int", TableInfo)
                {
                    IsPrimaryKey = true
                };
                ColumnInfo.SaveToDatabase();

                LoadMetadata = new LoadMetadata(repository, "HICLoadPipelineTests")
                {
                    LocationOfFlatFiles = directory.RootPath.FullName
                };
                LoadMetadata.SaveToDatabase();

                Catalogue = new Catalogue(repository, "HICLoadPipelineTests")
                {
                    LoggingDataTask = "Test",
                    LoadMetadata_ID = LoadMetadata.ID
                };
                Catalogue.SaveToDatabase();

                var catalogueItem = new CatalogueItem(repository, Catalogue, "Test");

                catalogueItem.SetColumnInfo(ColumnInfo);

                SetupLoadProcessTasks(repository);
            }
Esempio n. 6
0
        public void GetAllUsersOfACredential()
        {
            //Get all TableInfos that share this credential
            TableInfo tableInfo1 = new TableInfo(CatalogueRepository, "Create2TableInfosThatShareTheSameCredentialAndTestDeletingIt1");
            TableInfo tableInfo2 = new TableInfo(CatalogueRepository, "Create2TableInfosThatShareTheSameCredentialAndTestDeletingIt2");
            var       creds      = new DataAccessCredentials(CatalogueRepository, "bob");

            tableInfo1.SetCredentials(creds, DataAccessContext.InternalDataProcessing);
            tableInfo2.SetCredentials(creds, DataAccessContext.InternalDataProcessing);
            tableInfo1.SaveToDatabase();
            tableInfo2.SaveToDatabase();


            TableInfo[] TablesThatUseCredential = creds.GetAllTableInfosThatUseThis()[DataAccessContext.InternalDataProcessing].ToArray();

            Assert.AreEqual(TablesThatUseCredential[0], tableInfo1);
            Assert.AreEqual(TablesThatUseCredential[1], tableInfo2);

            tableInfo1.DeleteInDatabase();
            tableInfo2.DeleteInDatabase();
            creds.DeleteInDatabase();
        }
Esempio n. 7
0
        public void TestRemoteTableAttacher_Normal(DatabaseType dbType)
        {
            var db = GetCleanedServer(dbType);

            var attacher = new RemoteTableAttacher();

            //where to go for data
            attacher.RemoteServer       = db.Server.Name;
            attacher.RemoteDatabaseName = db.GetRuntimeName();
            attacher.DatabaseType       = db.Server.DatabaseType;

            if (db.Server.ExplicitUsernameIfAny != null)
            {
                var creds = new DataAccessCredentials(CatalogueRepository);
                creds.Username = db.Server.ExplicitUsernameIfAny;
                creds.Password = db.Server.ExplicitPasswordIfAny;
                creds.SaveToDatabase();
                attacher.RemoteTableAccessCredentials = creds;
            }

            RunAttachStageWithNormalJob(attacher, db);
        }
Esempio n. 8
0
        public void Create2TableInfosThatShareTheSameCredentialAndTestDeletingIt_ThrowsThatCredentialsHasDependencies()
        {
            //Get all TableInfos that share this credential
            TableInfo tableInfo1 = new TableInfo(CatalogueRepository, "Dependency1");
            TableInfo tableInfo2 = new TableInfo(CatalogueRepository, "Dependency2");
            var       creds      = new DataAccessCredentials(CatalogueRepository, "bob");

            try
            {
                tableInfo1.SetCredentials(creds, DataAccessContext.InternalDataProcessing);
                tableInfo2.SetCredentials(creds, DataAccessContext.InternalDataProcessing);
                tableInfo1.SaveToDatabase();
                tableInfo2.SaveToDatabase();

                var ex = Assert.Throws <CredentialsInUseException>(creds.DeleteInDatabase);//the bit that fails (because tables are there)
                Assert.AreEqual("Cannot delete credentials bob because it is in use by one or more TableInfo objects(Dependency1,Dependency2)", ex.Message);
            }
            finally
            {
                tableInfo1.DeleteInDatabase(); //will work
                tableInfo2.DeleteInDatabase(); //will work
                creds.DeleteInDatabase();      //will work
            }
        }
Esempio n. 9
0
        public void TestGettingConnectionStrings()
        {
            foreach (TableInfo tbl in CatalogueRepository.GetAllObjects <TableInfo>().Where(table => table.Name.ToLower().Equals("bob")))
            {
                tbl.DeleteInDatabase();
            }

            foreach (var c in CatalogueRepository.GetAllObjects <DataAccessCredentials>().Where(cred => cred.Name.ToLower().Equals("bob")))
            {
                c.DeleteInDatabase();
            }

            //test it with TableInfos
            TableInfo t = new TableInfo(CatalogueRepository, "Bob");

            try
            {
                t.Server   = "fish";
                t.Database = "bobsDatabase";
                t.SaveToDatabase();

                //t has no credentials
                var server = DataAccessPortal.GetInstance().ExpectServer(t, DataAccessContext.InternalDataProcessing);

                Assert.AreEqual(typeof(SqlConnectionStringBuilder), server.Builder.GetType());
                Assert.AreEqual("fish", ((SqlConnectionStringBuilder)server.Builder).DataSource);
                Assert.AreEqual("bobsDatabase", ((SqlConnectionStringBuilder)server.Builder).InitialCatalog);
                Assert.AreEqual(true, ((SqlConnectionStringBuilder)server.Builder).IntegratedSecurity);

                var creds = new DataAccessCredentials(CatalogueRepository, "Bob");
                try
                {
                    t.SetCredentials(creds, DataAccessContext.InternalDataProcessing, true);
                    creds.Username = "******";
                    creds.Password = "******";
                    creds.SaveToDatabase();

                    //credentials are cached
                    t.ClearAllInjections();

                    ////t has some credentials now
                    server = DataAccessPortal.GetInstance().ExpectServer(t, DataAccessContext.InternalDataProcessing);

                    Assert.AreEqual(typeof(SqlConnectionStringBuilder), server.Builder.GetType());
                    Assert.AreEqual("fish", ((SqlConnectionStringBuilder)server.Builder).DataSource);
                    Assert.AreEqual("bobsDatabase", ((SqlConnectionStringBuilder)server.Builder).InitialCatalog);
                    Assert.AreEqual("frank", ((SqlConnectionStringBuilder)server.Builder).UserID);
                    Assert.AreEqual("bobsPassword", ((SqlConnectionStringBuilder)server.Builder).Password);
                    Assert.AreEqual(false, ((SqlConnectionStringBuilder)server.Builder).IntegratedSecurity);
                }
                finally
                {
                    var linker = new TableInfoCredentialsManager(CatalogueRepository);
                    linker.BreakAllLinksBetween(creds, t);
                    creds.DeleteInDatabase();
                }
            }
            finally
            {
                t.DeleteInDatabase();
            }
        }
 public DataAccessCredentialsCombineable(DataAccessCredentials dataAccessCredentials)
 {
     DataAccessCredentials = dataAccessCredentials;
 }
Esempio n. 11
0
 public DataAccessCredentialsCommand(DataAccessCredentials dataAccessCredentials)
 {
     DataAccessCredentials = dataAccessCredentials;
     CurrentUsage          = DataAccessCredentials.GetAllTableInfosThatUseThis();
 }
Esempio n. 12
0
        private void AddCredentials()
        {
            var newCredentials = new DataAccessCredentials(RepositoryLocator.CatalogueRepository, "New Blank Credentials " + Guid.NewGuid());

            Publish(newCredentials);
        }
Esempio n. 13
0
 public ExecuteCommandUseCredentialsToAccessTableInfoData(IBasicActivateItems activator,
                                                          DataAccessCredentials credentials, TableInfo targetTableInfo) : this(activator,
                                                                                                                               new DataAccessCredentialsCombineable(credentials), targetTableInfo)
 {
 }
Esempio n. 14
0
        /// <inheritdoc/>
        public Dictionary <DataAccessContext, List <TableInfo> > GetAllTablesUsingCredentials(DataAccessCredentials credentials)
        {
            Dictionary <DataAccessContext, List <int> > toReturn = new Dictionary <DataAccessContext, List <int> >();

            toReturn.Add(DataAccessContext.Any, new List <int>());
            toReturn.Add(DataAccessContext.DataExport, new List <int>());
            toReturn.Add(DataAccessContext.DataLoad, new List <int>());
            toReturn.Add(DataAccessContext.InternalDataProcessing, new List <int>());
            toReturn.Add(DataAccessContext.Logging, new List <int>());

            using (var con = _repository.GetConnection())
            {
                using (var cmd = DatabaseCommandHelper.GetCommand(
                           "SELECT TableInfo_ID,Context FROM DataAccessCredentials_TableInfo WHERE DataAccessCredentials_ID = @cid",
                           con.Connection, con.Transaction))
                {
                    cmd.Parameters.Add(DatabaseCommandHelper.GetParameter("@cid", cmd));
                    cmd.Parameters["@cid"].Value = credentials.ID;

                    using (var r = cmd.ExecuteReader())
                        while (r.Read())
                        {
                            //get the context
                            DataAccessContext context = GetContext(r);

                            //add the TableInfo under that context
                            toReturn[context].Add((int)r["TableInfo_ID"]);
                        }
                }
            }

            return(toReturn.ToDictionary(k => k.Key, v => _repository.GetAllObjectsInIDList <TableInfo>(v.Value).ToList()));
        }
Esempio n. 15
0
 public DataAccessCredentialUsageNode(DataAccessCredentials credentials, ITableInfo tableInfo, DataAccessContext context)
 {
     Credentials = credentials;
     TableInfo   = tableInfo;
     Context     = context;
 }