public static User Authenticate(this IDatabase database, string username, string password) { // Create a temporary connection for authentication only... using (var session = database.CreateSystemSession()) { session.CurrentSchema(SystemSchema.Name); session.ExclusiveLock(); using (var queryContext = new SessionQueryContext(session)) { return queryContext.Authenticate(username, password); } } }
/// <summary> /// Creates the database in the context given, granting the administrative /// control to the user identified by the given name and password. /// </summary> /// <param name="adminName">The name of the administrator.</param> /// <param name="adminPassword">The password used to identify the administrator.</param> /// <exception cref="DatabaseSystemException"> /// If the database context is configured to be in read-only model, if it was not possible /// to commit the initial information or if another unhanded error occurred while /// creating the database. /// </exception> /// <exception cref="System.ArgumentNullException"> /// If either one of <paramref name="adminName"/> or <paramref name="adminPassword"/> /// are <c>null</c> or empty. /// </exception> /// <remarks> /// <para> /// The properties used to create the database are extracted from /// the underlying context (<see cref="DatabaseContext" />). /// </para> /// <para> /// This method does not automatically open the database: to make it accessible /// a call to <see cref="Open" /> is required. /// </para> /// </remarks> /// <seealso cref="IDatabaseContext.Configuration" /> public void Create(string adminName, string adminPassword) { if (DatabaseContext.ReadOnly()) throw new DatabaseSystemException("Cannot create database in read-only mode."); if (String.IsNullOrEmpty(adminName)) throw new ArgumentNullException("adminName"); if (String.IsNullOrEmpty(adminPassword)) throw new ArgumentNullException("adminPassword"); try { // Create the conglomerate TableComposite.Create(); using (var session = this.CreateInitialSystemSession()) { session.AutoCommit(false); using (var context = new SessionQueryContext(session)) { session.ExclusiveLock(); session.CurrentSchema(SystemSchema.Name); // Create the schema information tables CreateSchemata(context); // The system tables that are present in every conglomerate. SystemSchema.CreateTables(context); // Create the system views InformationSchema.CreateViews(context); this.CreateAdminUser(context, adminName, adminPassword); SetCurrentDataVersion(context); // Set all default system procedures. // TODO: SystemSchema.SetupSystemFunctions(session, username); try { // Close and commit this transaction. session.Commit(); } catch (TransactionException e) { throw new DatabaseSystemException("Could not commit the initial information", e); } } } // Close the conglomerate. TableComposite.Close(); } catch (DatabaseSystemException) { throw; } catch (Exception e) { throw new DatabaseSystemException("An error occurred while creating the database.", e); } }