Note: If you are making a
        Web Application: Secwin 7 requires NetTalk 12. For Desktop programs
        Secwin 7 will work with NetTalk 11.
      
      Secwin aims to provide program-level-security to your application. It
      allows your customer to control who can use your program, and what aspects
      of the program they can use. We call this 
Program
        Access Control. The key goals here are flexibility (every end
      user has different policies) and usability (customers need to be able to
      manage their own security and not rely on the developer to do it for
      them.)
      
      In addition large customers have different needs to small customers (such
      as Active Directory integration) and so Secwin is designed to be flexible,
      allowing customers to tailor the security to their needs. A range of
      features, including password resets, self-sign-on, guest accounts and more
      make Secwin the last security tool you will need.
      
      It also allows you to control which features in your program the customer
      has access to. We call this 
 Licensing. The
      primary goal of licensing is to ensure that you get paid. Licensing needs
      to be flexible to match your needs, easy for both you and your customer,
      and online so that you can easily update your clients license as their
      needs (or lack of payment) change. Designed for both single-sale software
      and subscription services. It includes a web server app that can be used
      as a licensing server, or you can make use of our SecwinOnlineServer to
      host your licenses for you.
      
      Secwin is designed to work on desktop, and web applications, and supports
      single-tenant or multi-tenant setups. 
      
      Secwin does not provide data-level-security. That is provided by MyTable
      and Cryptonite. 
      Secwin protects its own data from external viewing using MyTable and
      Cryptonite so these accessories are required in order for Secwin to
      compile.
      
      In today's world no program, or user, stands alone. Secwin is designed to
      integrate to a SendEmail or SendSMS function (or both). These allow
      features like second factor authentication, password resets, self-sign-up
      accounts and so on. For this reason NetTalk (Desktop level or higher) is
      recommended even for Desktop programs. NetTalk also allows for online
      licensing features and Active Directory integration. NetTalk is officially
      an "optional" requirement, however many features require it, so it is
      highly recommended.
      
      If unauthorized uses have access to the database, and they can tamper with
      fields (for example deleting them, or causing them to become invalid) or
      delete records, then certain Secwin features may no longer be effective.
      For example if someone can TopScan the DSSW7 file, and remove a user
      record, then that user will no longer be able to log in.
      
      For this reason physical access to the database should be restricted using
      whatever mechanism is appropriate for the database. For TPS this means
      adding an owner to the table. For SQL it means limiting access to the
      security database and so on.
      
      If an unauthorized person does get access to the database, data inside it
      will not be exposed. Any data they damage can be restored from backups,
      and the data itself will not be compromised.
      
History
       Secwin was one of CapeSoft's first accessories for
        Clarion for Windows, and shipped in the mid 90's. It has proved to be a
        work-horse providing access control, and licensing for a generation of
        Clarion programmers.
        
        Fast-forward to the mid-teens and cwin's age is starting to show.
        Designed originally for desktop use, it's not ideal on the web. Plus it
        uses a DLL, which is now something we prefer not to do. And
        best-practices with regard to passwords have changed enormously over the
        last twenty five years.
        
        Enter Secwin 7. A complete re-design, and a brand new implementation of
        Secwin. This is a complete, from the ground up, rebuild of Secwin and
        uses next to none of the existing code or table structures. It takes the
        current best practices and provides them in a modern way, aimed not just
        at desktop users but web users as well.
        
        None of this would be useful though if your existing security settings,
        or customer setups, are lost. Secwin 7 is therefore a drop-in
        replacement for Secwin 6 (and earlier) and converting an application
        from Secwin 6 to Secwin 7 takes a minimal amount of time and fuss.
        Equally, a simple utility for converting existing Secwin data to Secwin
        7 is provided. 
     
     The user logs in using a user name and password.
      However individual customers have individual requirements that can vary
      enormously from one customer to another. In addition the platform being
      used (desktop or web) may have special requirements that need to be
      supported. 
      
      To make logins as powerful, safe, and as feature-rich as possible - while
      at the same time making them easy enough to setup and use by mere humans
      has been a challenge. The result though is the most comprehensive login
      system available for Clarion. All facets of the login system can be
      controlled at runtime so each customer can configure it to their own needs
      and policies. These features include;
      
        - No logins at all - Users can choose to make the system loginless.
- Passwords are stored as Salted-Hashed values, not as encrypted text,
          in accordance with all current best practices.
- Second Factor Authentication using SMS or Email with Customer
          Defined Policies. When to require the second factor is a crucial
          element here, with options including every time, only on new devices,
          or on a time-based system.
- Active Directory support for those customers with an Active
          Directory server. This allows for password, or password-less logins[1] against an Active Directory server, and
          also an optional In-Group setting on the server. This gives Active
          Directory Administrators complete control over who can use the
          program.
- Guest Logins (with pre-defined guest accounts) can be added. These
          have a user name, but no password, and usually have limited program
          access rights.
- Customer-defined password policies allow each customer to determine
          the password requirements for their users. Interesting options here
          include the prevention of password-reuse, and also the unacceptance of
          passwords that are commonly used by people. (So no 1234
            or password weak passwords.)
- Customer-defined Lockout policies allow the user to determine when a
          user account will be locked (and for how long it will be locked) if
          multiple incorrect passwords are entered.
- Password Resets via SMS or Email
- Users can create new accounts (ie self sign-up) and be given default
          access rights.
- multi-tenant support with either unique-user or company/user logins.
Note [1]
      Password-Less Active Directory Logins are currently only available in
      Desktop apps.
      
Security Tables
      
        
          -  All sensitive information in the data tables are stored encrypted
            and cannot be altered (or deciphered) by unauthorized programs. 
-  Unencrypted fields are tamper resistant - editing them in an
            external program will make the data unusable.
-  Tables make use a of 3-secret system meaning that data can be
            bound to a specific program, specific table, or specific customer.
-  All secure information in the tables can be extended without
            changes to the file structure. This means that (for example) new
            security policies (and new settings) can be introduced and no file
            conversion is required.
-  The tables are declared in your dictionary, and can be extended
            with additional fields if you desire. (This would then necessitate a
            normal table-conversion)
-  User data is stored encrypted, in conformance with various
            privacy laws.