Debugging Trust Levels - Oledb

Ask a Question related to ASP.NET Security, Design and Development.

  1. #1

    Default Debugging Trust Levels - Oledb

    Hi There,

    I want to configure a custom trust level for asp.net that will essentially
    be the same as low trust except that it adds the ability to run oledb
    connections.

    When setting this up, it doesn't seem to be as simple as just adding

    <SecurityClass Name="OleDbPermission"
    Description="System.Data.OleDb.OleDbPermission, System.Data,
    Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

    and

    <IPermission class="OleDbPermission"
    version="1" Unrestricted="true"/>

    to the named permission set "ASP.Net" in my custom policy file.

    I have created a simple webform that returns an oledb recordset from an
    access database stored within the folder containing the application starting
    point.

    When the machine.config is set to FullTrust, everything works beautifully,
    when I switch to a lower level of trust, the application doesn't return the
    recordset or any errors.

    Is this normal behaviour?

    How do people normally debug OLEDB Trust levels from an Administrative point
    of view?

    Ben.


    Ben Sudbury Guest

  2. Similar Questions and Discussions

    1. Debugging output does not appear when use Debugging IPAddresses
      I recently absorbed the task of supporting our CF MX 6.1 server. We have an app that we need to debug - the developer asked us to add her IP...
    2. Medium Trust and oledb access
      Hi I am configuring a server for a shared hosting environment and want to lock down the server. I changed the trust level to medium but all MySQL...
    3. Giving Trust ot Assembly
      Hi, I have generated a dll Assembly with a Key having a class with public method returning a string in C#, When i am trying to give trust to...
    4. Assembly (.dll) Trust
      Hi, I have generated a dll Assembly with a Key having a class with public method returning a string in C#, When i am trying to give trust to...
    5. Trust 610 Cardreader USB
      Cath wrote: Thanks, Cath, I'll give it a try when I get home. Does this include the above named device in its device list, or do I need to...
  3. #2

    Default RE: Debugging Trust Levels - Oledb

    Hi Ben,

    The OLE DB .NET data provider demands full-trust callers. If your ASP.NET
    app needs to access OLE DB data sources while running at a custom trust,
    use the sandboxing approach. Place your data access code in a separate
    assembly, strong name it, and install it in the GAC, which gives it full
    trust. For more information, you may refer to this article:

    Using Code Access Security with ASP .NET
    [url]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/ht[/url]
    ml/THCMCh09.asp

    Hope this help,

    Luke
    Microsoft Online Support

    Get Secure! [url]www.microsoft.com/security[/url]
    (This posting is provided "AS IS", with no warranties, and confers no
    rights.)

    [MSFT] Guest

  4. #3

    Default RE: Debugging Trust Levels - Oledb

    Hi Ben,

    Is my answer make sense to you, or you need more information on this?

    Luke
    Microsoft Online Support

    Get Secure! [url]www.microsoft.com/security[/url]
    (This posting is provided "AS IS", with no warranties, and confers no
    rights.)

    [MSFT] Guest

  5. #4

    Default Re: Debugging Trust Levels - Oledb

    Hi Luke,

    Thanks for this information.

    This does help me in debugging permissions somewhat.

    There are 2 remaining questions for me.

    1. Why does the code calling oledb just fail without an error when running
    in a medium trust environment? (I have tested this on two machines now and
    get the same behaviour)

    2. In our environment we are happy to trust oledb access, and would like
    anyone running an application on our server to be able to use oledb, while
    maintaining a general level of medium trust, so I want to explore the
    options that are available to us.

    a) Get each application programmer to wrap their database calls in it's own
    class with assert statements and sign it and register it with the GAC. (Not
    very good as it requires extra code to be written by each and every
    programmer and extra admin to register all the classess with the GAC.

    b) Write a wrapper class that wraps all of the oledb classes and their
    methods using assert statements to call the original properties and methods,
    sign and register with the GAC. (Not bad, because each programmer would only
    need to replace their imports statements from system.data.oledb to
    mywrapper.oledb and all of their code would work - correct?)

    c) Is there another option of maybe signing the system.data class again
    without the requirement for Full Trust access? Are there any other options
    that allow me to set it up so that each of the programmers has the minimum
    changes required in their code but still retains the security of a partial
    trust environment?

    Regards,

    Ben.

    "[MSFT]" <lukezhan@online.microsoft.com> wrote in message
    news:dWBDZ#GIEHA.616@cpmsftngxa06.phx.gbl...
    > Hi Ben,
    >
    > Is my answer make sense to you, or you need more information on this?
    >
    > Luke
    > Microsoft Online Support
    >
    > Get Secure! [url]www.microsoft.com/security[/url]
    > (This posting is provided "AS IS", with no warranties, and confers no
    > rights.)
    >

    Ben Sudbury Guest

  6. #5

    Default Re: Debugging Trust Levels - Oledb

    Hi Ben,

    Regarding the question 1, can you let me know the code you use. I may check
    them to find the reason

    for question, I think the approuch b should be better for the programmer.

    regards,

    Luke
    Microsoft Online Support

    Get Secure! [url]www.microsoft.com/security[/url]
    (This posting is provided "AS IS", with no warranties, and confers no
    rights.)

    [MSFT] Guest

  7. #6

    Default Re: Debugging Trust Levels - Oledb

    Hi There,

    Below is the code that I am using. It's just a down and dirty proof of
    concept

    ----- Webform1.aspx.cs ------
    using System;

    using System.Collections;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Web;

    using System.Web.SessionState;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Web.UI.HtmlControls;

    using System.Security;

    using System.Security.Permissions;

    using System.Data.OleDb;

    using System.IO.IsolatedStorage;

    namespace SecurityTest

    {

    /// <summary>

    /// Summary description for WebForm1.

    /// </summary>

    public class WebForm1 : System.Web.UI.Page

    {

    protected System.Data.OleDb.OleDbConnection oleDbConnection1;

    protected System.Web.UI.WebControls.DataGrid DataGrid1;

    protected System.Data.OleDb.OleDbDataAdapter oleDbDataAdapter1;

    protected System.Data.OleDb.OleDbCommand oleDbSelectCommand1;

    protected System.Data.OleDb.OleDbCommand oleDbInsertCommand1;

    protected System.Data.OleDb.OleDbCommand oleDbUpdateCommand1;

    protected System.Data.OleDb.OleDbCommand oleDbDeleteCommand1;

    protected System.Data.DataSet dataSet1;

    protected System.Data.SqlClient.SqlConnection sqlConnection1;

    protected System.Web.UI.WebControls.Button Button1;


    private void Page_Load(object sender, System.EventArgs e)

    {

    // Put user code to initialize the page here

    }

    #region Web Form Designer generated code

    override protected void OnInit(EventArgs e)

    {

    //

    // CODEGEN: This call is required by the ASP.NET Web Form Designer.

    //

    try

    {

    InitializeComponent();

    }

    catch(SecurityException ex)

    {

    /* String exDetails = ex.GrantedSet;

    exDetails += ex.PermissionState;

    exDetails += ex.PermissionType;

    exDetails += ex.RefusedSet;

    Response.Write(exDetails);

    */

    }

    base.OnInit(e);

    }


    /// <summary>

    /// Required method for Designer support - do not modify

    /// the contents of this method with the code editor.

    /// </summary>

    private void InitializeComponent()

    {

    this.oleDbConnection1 = new System.Data.OleDb.OleDbConnection();

    this.oleDbDataAdapter1 = new System.Data.OleDb.OleDbDataAdapter();

    this.oleDbDeleteCommand1 = new System.Data.OleDb.OleDbCommand();

    this.oleDbInsertCommand1 = new System.Data.OleDb.OleDbCommand();

    this.oleDbSelectCommand1 = new System.Data.OleDb.OleDbCommand();

    this.oleDbUpdateCommand1 = new System.Data.OleDb.OleDbCommand();

    this.dataSet1 = new System.Data.DataSet();

    this.sqlConnection1 = new System.Data.SqlClient.SqlConnection();

    ((System.ComponentModel.ISupportInitialize)(this.d ataSet1)).BeginInit();

    this.Button1.Click += new System.EventHandler(this.Button1_Click);

    //

    // oleDbDataAdapter1

    //

    this.oleDbDataAdapter1.DeleteCommand = this.oleDbDeleteCommand1;

    this.oleDbDataAdapter1.InsertCommand = this.oleDbInsertCommand1;

    this.oleDbDataAdapter1.SelectCommand = this.oleDbSelectCommand1;

    this.oleDbDataAdapter1.TableMappings.AddRange(new
    System.Data.Common.DataTableMapping[] {

    new System.Data.Common.DataTableMapping("Table", "test", new
    System.Data.Common.DataColumnMapping[] {

    new System.Data.Common.DataColumnMapping("testField", "testField"),

    new System.Data.Common.DataColumnMapping("testid", "testid")})});

    this.oleDbDataAdapter1.UpdateCommand = this.oleDbUpdateCommand1;

    //

    // oleDbDeleteCommand1

    //

    this.oleDbDeleteCommand1.CommandText = "DELETE FROM test WHERE (testid = ?)
    AND (testField = ? OR ? IS NULL AND testField" +

    " IS NULL)";

    this.oleDbDeleteCommand1.Connection = this.oleDbConnection1;

    this.oleDbDeleteCommand1.Parameters.Add(new
    System.Data.OleDb.OleDbParameter("Original_testid" ,
    System.Data.OleDb.OleDbType.Integer, 0,
    System.Data.ParameterDirection.Input, false, ((System.Byte)(0)),
    ((System.Byte)(0)), "testid", System.Data.DataRowVersion.Original, null));

    this.oleDbDeleteCommand1.Parameters.Add(new
    System.Data.OleDb.OleDbParameter("Original_testFie ld",
    System.Data.OleDb.OleDbType.VarWChar, 50,
    System.Data.ParameterDirection.Input, false, ((System.Byte)(0)),
    ((System.Byte)(0)), "testField", System.Data.DataRowVersion.Original,
    null));

    this.oleDbDeleteCommand1.Parameters.Add(new
    System.Data.OleDb.OleDbParameter("Original_testFie ld1",
    System.Data.OleDb.OleDbType.VarWChar, 50,
    System.Data.ParameterDirection.Input, false, ((System.Byte)(0)),
    ((System.Byte)(0)), "testField", System.Data.DataRowVersion.Original,
    null));

    //

    // oleDbInsertCommand1

    //

    this.oleDbInsertCommand1.CommandText = "INSERT INTO test(testField) VALUES
    (?)";

    this.oleDbInsertCommand1.Connection = this.oleDbConnection1;

    this.oleDbInsertCommand1.Parameters.Add(new
    System.Data.OleDb.OleDbParameter("testField",
    System.Data.OleDb.OleDbType.VarWChar, 50, "testField"));

    //

    // oleDbSelectCommand1

    //

    this.oleDbSelectCommand1.CommandText = "SELECT testField, testid FROM test";

    this.oleDbSelectCommand1.Connection = this.oleDbConnection1;

    //

    // oleDbUpdateCommand1

    //

    this.oleDbUpdateCommand1.CommandText = "UPDATE test SET testField = ? WHERE
    (testid = ?) AND (testField = ? OR ? IS NULL " +

    "AND testField IS NULL)";

    this.oleDbUpdateCommand1.Connection = this.oleDbConnection1;

    this.oleDbUpdateCommand1.Parameters.Add(new
    System.Data.OleDb.OleDbParameter("testField",
    System.Data.OleDb.OleDbType.VarWChar, 50, "testField"));

    this.oleDbUpdateCommand1.Parameters.Add(new
    System.Data.OleDb.OleDbParameter("Original_testid" ,
    System.Data.OleDb.OleDbType.Integer, 0,
    System.Data.ParameterDirection.Input, false, ((System.Byte)(0)),
    ((System.Byte)(0)), "testid", System.Data.DataRowVersion.Original, null));

    this.oleDbUpdateCommand1.Parameters.Add(new
    System.Data.OleDb.OleDbParameter("Original_testFie ld",
    System.Data.OleDb.OleDbType.VarWChar, 50,
    System.Data.ParameterDirection.Input, false, ((System.Byte)(0)),
    ((System.Byte)(0)), "testField", System.Data.DataRowVersion.Original,
    null));

    this.oleDbUpdateCommand1.Parameters.Add(new
    System.Data.OleDb.OleDbParameter("Original_testFie ld1",
    System.Data.OleDb.OleDbType.VarWChar, 50,
    System.Data.ParameterDirection.Input, false, ((System.Byte)(0)),
    ((System.Byte)(0)), "testField", System.Data.DataRowVersion.Original,
    null));

    //

    // dataSet1

    //

    this.dataSet1.DataSetName = "NewDataSet";

    this.dataSet1.Locale = new System.Globalization.CultureInfo("en-AU");

    //

    // sqlConnection1

    //

    this.sqlConnection1.ConnectionString = "workstation id=KICKASS;packet
    size=4096;user id=ben;data source=\"data.ico.com.au\"" +

    ";persist security info=False;initial catalog=liveAllens";

    this.sqlConnection1.InfoMessage += new
    System.Data.SqlClient.SqlInfoMessageEventHandler(t his.sqlConnection1_InfoMes
    sage);

    this.Load += new System.EventHandler(this.Page_Load);

    ((System.ComponentModel.ISupportInitialize)(this.d ataSet1)).EndInit();

    }

    #endregion

    private void Button1_Click(object sender, System.EventArgs e)

    {

    oleDbDataAdapter1.Fill(dataSet1);

    DataGrid1.DataBind();

    }

    private void sqlConnection1_InfoMessage(object sender,
    System.Data.SqlClient.SqlInfoMessageEventArgs e)

    {


    }

    }

    }

    "[MSFT]" <lukezhan@online.microsoft.com> wrote in message
    news:zHOLxdTIEHA.4056@cpmsftngxa10.phx.gbl...
    > Hi Ben,
    >
    > Regarding the question 1, can you let me know the code you use. I may
    check
    > them to find the reason
    >
    > for question, I think the approuch b should be better for the programmer.
    >
    > regards,
    >
    > Luke
    > Microsoft Online Support
    >
    > Get Secure! [url]www.microsoft.com/security[/url]
    > (This posting is provided "AS IS", with no warranties, and confers no
    > rights.)
    >

    Ben Sudbury Guest

  8. #7

    Default Re: Debugging Trust Levels - Oledb

    Hi Ben,

    I tested your code and it throw a SecurityException with Medium trust level.

    Luke
    Microsoft Online Support

    Get Secure! [url]www.microsoft.com/security[/url]
    (This posting is provided "AS IS", with no warranties, and confers no
    rights.)

    [MSFT] Guest

Posting Permissions

  • You may not post new threads
  • You may post replies
  • You may not post attachments
  • You may not edit your posts

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139