# encoding: UTF-8 # This file is auto-generated from the current state of the database. Instead # of editing this file, please use the migrations feature of Active Record to # incrementally modify your database, and then regenerate this schema definition. # # Note that this schema.rb definition is the authoritative source for your # database schema. If you need to create the application database on another # system, you should be using db:schema:load, not running all the migrations # from scratch. The latter is a flawed and unsustainable approach (the more migrations # you'll amass, the slower it'll run and the greater likelihood for issues). # # It's strongly recommended that you check this file into your version control system. ActiveRecord::Schema.define(version: 20161227212223) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" create_table "api_keys", force: :cascade do |t| t.text "token" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "automatic_exploitation_match_results", force: :cascade do |t| t.integer "match_id" t.integer "run_id" t.string "state", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end add_index "automatic_exploitation_match_results", ["match_id"], name: "index_automatic_exploitation_match_results_on_match_id", using: :btree add_index "automatic_exploitation_match_results", ["run_id"], name: "index_automatic_exploitation_match_results_on_run_id", using: :btree create_table "automatic_exploitation_match_sets", force: :cascade do |t| t.integer "workspace_id" t.integer "user_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false end add_index "automatic_exploitation_match_sets", ["user_id"], name: "index_automatic_exploitation_match_sets_on_user_id", using: :btree add_index "automatic_exploitation_match_sets", ["workspace_id"], name: "index_automatic_exploitation_match_sets_on_workspace_id", using: :btree create_table "automatic_exploitation_matches", force: :cascade do |t| t.integer "module_detail_id" t.string "state" t.integer "nexpose_data_vulnerability_definition_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "match_set_id" t.string "matchable_type" t.integer "matchable_id" t.text "module_fullname" end add_index "automatic_exploitation_matches", ["module_detail_id"], name: "index_automatic_exploitation_matches_on_module_detail_id", using: :btree add_index "automatic_exploitation_matches", ["module_fullname"], name: "index_automatic_exploitation_matches_on_module_fullname", using: :btree create_table "automatic_exploitation_runs", force: :cascade do |t| t.integer "workspace_id" t.integer "user_id" t.integer "match_set_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false end add_index "automatic_exploitation_runs", ["match_set_id"], name: "index_automatic_exploitation_runs_on_match_set_id", using: :btree add_index "automatic_exploitation_runs", ["user_id"], name: "index_automatic_exploitation_runs_on_user_id", using: :btree add_index "automatic_exploitation_runs", ["workspace_id"], name: "index_automatic_exploitation_runs_on_workspace_id", using: :btree create_table "clients", force: :cascade do |t| t.integer "host_id" t.datetime "created_at" t.string "ua_string", limit: 1024, null: false t.string "ua_name", limit: 64 t.string "ua_ver", limit: 32 t.datetime "updated_at" end create_table "credential_cores_tasks", id: false, force: :cascade do |t| t.integer "core_id" t.integer "task_id" end create_table "credential_logins_tasks", id: false, force: :cascade do |t| t.integer "login_id" t.integer "task_id" end create_table "creds", force: :cascade do |t| t.integer "service_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "user", limit: 2048 t.string "pass", limit: 4096 t.boolean "active", default: true t.string "proof", limit: 4096 t.string "ptype", limit: 256 t.integer "source_id" t.string "source_type" end create_table "events", force: :cascade do |t| t.integer "workspace_id" t.integer "host_id" t.datetime "created_at" t.string "name" t.datetime "updated_at" t.boolean "critical" t.boolean "seen" t.string "username" t.text "info" end create_table "exploit_attempts", force: :cascade do |t| t.integer "host_id" t.integer "service_id" t.integer "vuln_id" t.datetime "attempted_at" t.boolean "exploited" t.string "fail_reason" t.string "username" t.text "module" t.integer "session_id" t.integer "loot_id" t.integer "port" t.string "proto" t.text "fail_detail" end create_table "exploited_hosts", force: :cascade do |t| t.integer "host_id", null: false t.integer "service_id" t.string "session_uuid", limit: 8 t.string "name", limit: 2048 t.string "payload", limit: 2048 t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "host_details", force: :cascade do |t| t.integer "host_id" t.integer "nx_console_id" t.integer "nx_device_id" t.string "src" t.string "nx_site_name" t.string "nx_site_importance" t.string "nx_scan_template" t.float "nx_risk_score" end create_table "hosts", force: :cascade do |t| t.datetime "created_at" t.inet "address", null: false t.string "mac" t.string "comm" t.string "name" t.string "state" t.string "os_name" t.string "os_flavor" t.string "os_sp" t.string "os_lang" t.string "arch" t.integer "workspace_id", null: false t.datetime "updated_at" t.text "purpose" t.string "info", limit: 65536 t.text "comments" t.text "scope" t.text "virtual_host" t.integer "note_count", default: 0 t.integer "vuln_count", default: 0 t.integer "service_count", default: 0 t.integer "host_detail_count", default: 0 t.integer "exploit_attempt_count", default: 0 t.integer "cred_count", default: 0 t.string "detected_arch" t.string "os_family" end add_index "hosts", ["name"], name: "index_hosts_on_name", using: :btree add_index "hosts", ["os_flavor"], name: "index_hosts_on_os_flavor", using: :btree add_index "hosts", ["os_name"], name: "index_hosts_on_os_name", using: :btree add_index "hosts", ["purpose"], name: "index_hosts_on_purpose", using: :btree add_index "hosts", ["state"], name: "index_hosts_on_state", using: :btree add_index "hosts", ["workspace_id", "address"], name: "index_hosts_on_workspace_id_and_address", unique: true, using: :btree create_table "hosts_tags", force: :cascade do |t| t.integer "host_id" t.integer "tag_id" end create_table "listeners", force: :cascade do |t| t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "workspace_id", default: 1, null: false t.integer "task_id" t.boolean "enabled", default: true t.text "owner" t.text "payload" t.text "address" t.integer "port" t.binary "options" t.text "macro" end create_table "loots", force: :cascade do |t| t.integer "workspace_id", default: 1, null: false t.integer "host_id" t.integer "service_id" t.string "ltype", limit: 512 t.string "path", limit: 1024 t.text "data" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "content_type" t.text "name" t.text "info" t.integer "module_run_id" end add_index "loots", ["module_run_id"], name: "index_loots_on_module_run_id", using: :btree create_table "macros", force: :cascade do |t| t.datetime "created_at", null: false t.datetime "updated_at", null: false t.text "owner" t.text "name" t.text "description" t.binary "actions" t.binary "prefs" end create_table "metasploit_credential_cores", force: :cascade do |t| t.integer "origin_id", null: false t.string "origin_type", null: false t.integer "private_id" t.integer "public_id" t.integer "realm_id" t.integer "workspace_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "logins_count", default: 0 end add_index "metasploit_credential_cores", ["origin_type", "origin_id"], name: "index_metasploit_credential_cores_on_origin_type_and_origin_id", using: :btree add_index "metasploit_credential_cores", ["private_id"], name: "index_metasploit_credential_cores_on_private_id", using: :btree add_index "metasploit_credential_cores", ["public_id"], name: "index_metasploit_credential_cores_on_public_id", using: :btree add_index "metasploit_credential_cores", ["realm_id"], name: "index_metasploit_credential_cores_on_realm_id", using: :btree add_index "metasploit_credential_cores", ["workspace_id", "private_id"], name: "unique_private_metasploit_credential_cores", unique: true, where: "((realm_id IS NULL) AND (public_id IS NULL) AND (private_id IS NOT NULL))", using: :btree add_index "metasploit_credential_cores", ["workspace_id", "public_id", "private_id"], name: "unique_realmless_metasploit_credential_cores", unique: true, where: "((realm_id IS NULL) AND (public_id IS NOT NULL) AND (private_id IS NOT NULL))", using: :btree add_index "metasploit_credential_cores", ["workspace_id", "public_id"], name: "unique_public_metasploit_credential_cores", unique: true, where: "((realm_id IS NULL) AND (public_id IS NOT NULL) AND (private_id IS NULL))", using: :btree add_index "metasploit_credential_cores", ["workspace_id", "realm_id", "private_id"], name: "unique_publicless_metasploit_credential_cores", unique: true, where: "((realm_id IS NOT NULL) AND (public_id IS NULL) AND (private_id IS NOT NULL))", using: :btree add_index "metasploit_credential_cores", ["workspace_id", "realm_id", "public_id", "private_id"], name: "unique_complete_metasploit_credential_cores", unique: true, where: "((realm_id IS NOT NULL) AND (public_id IS NOT NULL) AND (private_id IS NOT NULL))", using: :btree add_index "metasploit_credential_cores", ["workspace_id", "realm_id", "public_id"], name: "unique_privateless_metasploit_credential_cores", unique: true, where: "((realm_id IS NOT NULL) AND (public_id IS NOT NULL) AND (private_id IS NULL))", using: :btree add_index "metasploit_credential_cores", ["workspace_id"], name: "index_metasploit_credential_cores_on_workspace_id", using: :btree create_table "metasploit_credential_logins", force: :cascade do |t| t.integer "core_id", null: false t.integer "service_id", null: false t.string "access_level" t.string "status", null: false t.datetime "last_attempted_at" t.datetime "created_at", null: false t.datetime "updated_at", null: false end add_index "metasploit_credential_logins", ["core_id", "service_id"], name: "index_metasploit_credential_logins_on_core_id_and_service_id", unique: true, using: :btree add_index "metasploit_credential_logins", ["service_id", "core_id"], name: "index_metasploit_credential_logins_on_service_id_and_core_id", unique: true, using: :btree create_table "metasploit_credential_origin_cracked_passwords", force: :cascade do |t| t.integer "metasploit_credential_core_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end add_index "metasploit_credential_origin_cracked_passwords", ["metasploit_credential_core_id"], name: "originating_credential_cores", using: :btree create_table "metasploit_credential_origin_imports", force: :cascade do |t| t.text "filename", null: false t.integer "task_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false end add_index "metasploit_credential_origin_imports", ["task_id"], name: "index_metasploit_credential_origin_imports_on_task_id", using: :btree create_table "metasploit_credential_origin_manuals", force: :cascade do |t| t.integer "user_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end add_index "metasploit_credential_origin_manuals", ["user_id"], name: "index_metasploit_credential_origin_manuals_on_user_id", using: :btree create_table "metasploit_credential_origin_services", force: :cascade do |t| t.integer "service_id", null: false t.text "module_full_name", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end add_index "metasploit_credential_origin_services", ["service_id", "module_full_name"], name: "unique_metasploit_credential_origin_services", unique: true, using: :btree create_table "metasploit_credential_origin_sessions", force: :cascade do |t| t.text "post_reference_name", null: false t.integer "session_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end add_index "metasploit_credential_origin_sessions", ["session_id", "post_reference_name"], name: "unique_metasploit_credential_origin_sessions", unique: true, using: :btree create_table "metasploit_credential_privates", force: :cascade do |t| t.string "type", null: false t.text "data", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "jtr_format" end add_index "metasploit_credential_privates", ["type", "data"], name: "index_metasploit_credential_privates_on_type_and_data", unique: true, where: "(NOT ((type)::text = 'Metasploit::Credential::SSHKey'::text))", using: :btree add_index "metasploit_credential_privates", ["type"], name: "index_metasploit_credential_privates_on_type_and_data_sshkey", unique: true, where: "((type)::text = 'Metasploit::Credential::SSHKey'::text)", using: :btree create_table "metasploit_credential_publics", force: :cascade do |t| t.string "username", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "type", null: false end add_index "metasploit_credential_publics", ["username"], name: "index_metasploit_credential_publics_on_username", unique: true, using: :btree create_table "metasploit_credential_realms", force: :cascade do |t| t.string "key", null: false t.string "value", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end add_index "metasploit_credential_realms", ["key", "value"], name: "index_metasploit_credential_realms_on_key_and_value", unique: true, using: :btree create_table "mod_refs", force: :cascade do |t| t.string "module", limit: 1024 t.string "mtype", limit: 128 t.text "ref" end create_table "module_actions", force: :cascade do |t| t.integer "detail_id" t.text "name" end add_index "module_actions", ["detail_id"], name: "index_module_actions_on_detail_id", using: :btree create_table "module_archs", force: :cascade do |t| t.integer "detail_id" t.text "name" end add_index "module_archs", ["detail_id"], name: "index_module_archs_on_detail_id", using: :btree create_table "module_authors", force: :cascade do |t| t.integer "detail_id" t.text "name" t.text "email" end add_index "module_authors", ["detail_id"], name: "index_module_authors_on_detail_id", using: :btree create_table "module_details", force: :cascade do |t| t.datetime "mtime" t.text "file" t.string "mtype" t.text "refname" t.text "fullname" t.text "name" t.integer "rank" t.text "description" t.string "license" t.boolean "privileged" t.datetime "disclosure_date" t.integer "default_target" t.text "default_action" t.string "stance" t.boolean "ready" end add_index "module_details", ["description"], name: "index_module_details_on_description", using: :btree add_index "module_details", ["mtype"], name: "index_module_details_on_mtype", using: :btree add_index "module_details", ["name"], name: "index_module_details_on_name", using: :btree add_index "module_details", ["refname"], name: "index_module_details_on_refname", using: :btree create_table "module_mixins", force: :cascade do |t| t.integer "detail_id" t.text "name" end add_index "module_mixins", ["detail_id"], name: "index_module_mixins_on_detail_id", using: :btree create_table "module_platforms", force: :cascade do |t| t.integer "detail_id" t.text "name" end add_index "module_platforms", ["detail_id"], name: "index_module_platforms_on_detail_id", using: :btree create_table "module_refs", force: :cascade do |t| t.integer "detail_id" t.text "name" end add_index "module_refs", ["detail_id"], name: "index_module_refs_on_detail_id", using: :btree add_index "module_refs", ["name"], name: "index_module_refs_on_name", using: :btree create_table "module_runs", force: :cascade do |t| t.datetime "attempted_at" t.text "fail_detail" t.string "fail_reason" t.text "module_fullname" t.integer "port" t.string "proto" t.integer "session_id" t.string "status" t.integer "trackable_id" t.string "trackable_type" t.integer "user_id" t.string "username" t.datetime "created_at", null: false t.datetime "updated_at", null: false end add_index "module_runs", ["session_id"], name: "index_module_runs_on_session_id", using: :btree add_index "module_runs", ["user_id"], name: "index_module_runs_on_user_id", using: :btree create_table "module_targets", force: :cascade do |t| t.integer "detail_id" t.integer "index" t.text "name" end add_index "module_targets", ["detail_id"], name: "index_module_targets_on_detail_id", using: :btree create_table "nexpose_consoles", force: :cascade do |t| t.datetime "created_at", null: false t.datetime "updated_at", null: false t.boolean "enabled", default: true t.text "owner" t.text "address" t.integer "port", default: 3780 t.text "username" t.text "password" t.text "status" t.text "version" t.text "cert" t.binary "cached_sites" t.text "name" end create_table "notes", force: :cascade do |t| t.datetime "created_at" t.string "ntype", limit: 512 t.integer "workspace_id", default: 1, null: false t.integer "service_id" t.integer "host_id" t.datetime "updated_at" t.boolean "critical" t.boolean "seen" t.text "data" t.integer "vuln_id" end add_index "notes", ["ntype"], name: "index_notes_on_ntype", using: :btree add_index "notes", ["vuln_id"], name: "index_notes_on_vuln_id", using: :btree create_table "profiles", force: :cascade do |t| t.datetime "created_at", null: false t.datetime "updated_at", null: false t.boolean "active", default: true t.text "name" t.text "owner" t.binary "settings" end create_table "refs", force: :cascade do |t| t.integer "ref_id" t.datetime "created_at" t.string "name", limit: 512 t.datetime "updated_at" end add_index "refs", ["name"], name: "index_refs_on_name", using: :btree create_table "report_templates", force: :cascade do |t| t.integer "workspace_id", default: 1, null: false t.string "created_by" t.string "path", limit: 1024 t.text "name" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "reports", force: :cascade do |t| t.integer "workspace_id", default: 1, null: false t.string "created_by" t.string "rtype" t.string "path", limit: 1024 t.text "options" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.datetime "downloaded_at" t.integer "task_id" t.string "name", limit: 63 end create_table "routes", force: :cascade do |t| t.integer "session_id" t.string "subnet" t.string "netmask" end create_table "services", force: :cascade do |t| t.integer "host_id" t.datetime "created_at" t.integer "port", null: false t.string "proto", limit: 16, null: false t.string "state" t.string "name" t.datetime "updated_at" t.text "info" end add_index "services", ["host_id", "port", "proto"], name: "index_services_on_host_id_and_port_and_proto", unique: true, using: :btree add_index "services", ["name"], name: "index_services_on_name", using: :btree add_index "services", ["port"], name: "index_services_on_port", using: :btree add_index "services", ["proto"], name: "index_services_on_proto", using: :btree add_index "services", ["state"], name: "index_services_on_state", using: :btree create_table "session_events", force: :cascade do |t| t.integer "session_id" t.string "etype" t.binary "command" t.binary "output" t.string "remote_path" t.string "local_path" t.datetime "created_at" end create_table "sessions", force: :cascade do |t| t.integer "host_id" t.string "stype" t.string "via_exploit" t.string "via_payload" t.string "desc" t.integer "port" t.string "platform" t.text "datastore" t.datetime "opened_at", null: false t.datetime "closed_at" t.string "close_reason" t.integer "local_id" t.datetime "last_seen" t.integer "module_run_id" end add_index "sessions", ["module_run_id"], name: "index_sessions_on_module_run_id", using: :btree create_table "tags", force: :cascade do |t| t.integer "user_id" t.string "name", limit: 1024 t.text "desc" t.boolean "report_summary", default: false, null: false t.boolean "report_detail", default: false, null: false t.boolean "critical", default: false, null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "task_creds", force: :cascade do |t| t.integer "task_id", null: false t.integer "cred_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "task_hosts", force: :cascade do |t| t.integer "task_id", null: false t.integer "host_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "task_services", force: :cascade do |t| t.integer "task_id", null: false t.integer "service_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "task_sessions", force: :cascade do |t| t.integer "task_id", null: false t.integer "session_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "tasks", force: :cascade do |t| t.integer "workspace_id", default: 1, null: false t.string "created_by" t.string "module" t.datetime "completed_at" t.string "path", limit: 1024 t.string "info" t.string "description" t.integer "progress" t.text "options" t.text "error" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.text "result" t.string "module_uuid", limit: 8 t.binary "settings" end create_table "users", force: :cascade do |t| t.string "username" t.string "crypted_password" t.string "password_salt" t.string "persistence_token" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "fullname" t.string "email" t.string "phone" t.string "company" t.string "prefs", limit: 524288 t.boolean "admin", default: true, null: false end create_table "vuln_attempts", force: :cascade do |t| t.integer "vuln_id" t.datetime "attempted_at" t.boolean "exploited" t.string "fail_reason" t.string "username" t.text "module" t.integer "session_id" t.integer "loot_id" t.text "fail_detail" end create_table "vuln_details", force: :cascade do |t| t.integer "vuln_id" t.float "cvss_score" t.string "cvss_vector" t.string "title" t.text "description" t.text "solution" t.binary "proof" t.integer "nx_console_id" t.integer "nx_device_id" t.string "nx_vuln_id" t.float "nx_severity" t.float "nx_pci_severity" t.datetime "nx_published" t.datetime "nx_added" t.datetime "nx_modified" t.text "nx_tags" t.text "nx_vuln_status" t.text "nx_proof_key" t.string "src" t.integer "nx_scan_id" t.datetime "nx_vulnerable_since" t.string "nx_pci_compliance_status" end create_table "vulns", force: :cascade do |t| t.integer "host_id" t.integer "service_id" t.datetime "created_at" t.string "name" t.datetime "updated_at" t.string "info", limit: 65536 t.datetime "exploited_at" t.integer "vuln_detail_count", default: 0 t.integer "vuln_attempt_count", default: 0 t.integer "origin_id" t.string "origin_type" end add_index "vulns", ["name"], name: "index_vulns_on_name", using: :btree add_index "vulns", ["origin_id"], name: "index_vulns_on_origin_id", using: :btree create_table "vulns_refs", force: :cascade do |t| t.integer "ref_id" t.integer "vuln_id" end create_table "web_forms", force: :cascade do |t| t.integer "web_site_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.text "path" t.string "method", limit: 1024 t.text "params" t.text "query" end add_index "web_forms", ["path"], name: "index_web_forms_on_path", using: :btree create_table "web_pages", force: :cascade do |t| t.integer "web_site_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.text "path" t.text "query" t.integer "code", null: false t.text "cookie" t.text "auth" t.text "ctype" t.datetime "mtime" t.text "location" t.text "headers" t.binary "body" t.binary "request" end add_index "web_pages", ["path"], name: "index_web_pages_on_path", using: :btree add_index "web_pages", ["query"], name: "index_web_pages_on_query", using: :btree create_table "web_sites", force: :cascade do |t| t.integer "service_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "vhost", limit: 2048 t.text "comments" t.text "options" end add_index "web_sites", ["comments"], name: "index_web_sites_on_comments", using: :btree add_index "web_sites", ["options"], name: "index_web_sites_on_options", using: :btree add_index "web_sites", ["vhost"], name: "index_web_sites_on_vhost", using: :btree create_table "web_vulns", force: :cascade do |t| t.integer "web_site_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false t.text "path", null: false t.string "method", limit: 1024, null: false t.text "params" t.text "pname" t.integer "risk", null: false t.string "name", limit: 1024, null: false t.text "query" t.text "category", null: false t.integer "confidence", null: false t.text "description" t.text "blame" t.binary "request" t.binary "proof", null: false t.string "owner" t.text "payload" end add_index "web_vulns", ["method"], name: "index_web_vulns_on_method", using: :btree add_index "web_vulns", ["name"], name: "index_web_vulns_on_name", using: :btree add_index "web_vulns", ["path"], name: "index_web_vulns_on_path", using: :btree create_table "wmap_requests", force: :cascade do |t| t.string "host" t.inet "address" t.integer "port" t.integer "ssl" t.string "meth", limit: 32 t.text "path" t.text "headers" t.text "query" t.text "body" t.string "respcode", limit: 16 t.text "resphead" t.text "response" t.datetime "created_at" t.datetime "updated_at" end create_table "wmap_targets", force: :cascade do |t| t.string "host" t.inet "address" t.integer "port" t.integer "ssl" t.integer "selected" t.datetime "created_at" t.datetime "updated_at" end create_table "workspace_members", id: false, force: :cascade do |t| t.integer "workspace_id", null: false t.integer "user_id", null: false end create_table "workspaces", force: :cascade do |t| t.string "name" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "boundary", limit: 4096 t.string "description", limit: 4096 t.integer "owner_id" t.boolean "limit_to_network", default: false, null: false t.boolean "import_fingerprint", default: false end end