在MS ACCESS中的GRANT支持

3

大家好,

在 MS ACCESS 中支持 GRANT 权限吗?

我正在使用 ODBC 驱动程序从 C++ 应用程序连接到 accdb,并尝试发出 GRANT 命令,但是会收到一个错误,提示“期望 DELETE、INSERT、PROCEDURE、SELECT 或 UPDATE”。

我的系统环境是 Windows 8.1,使用的是 MSVC 2017 Community 版本。

我正在尝试执行以下命令:

GRANT SELECT ON MSysObjects TO Admin;

谢谢!

void uc_to_str_cpy(SQLWCHAR *dest, const std::wstring &src)
{
    const wchar_t *temp = src.c_str();
    while( *dest )
    {
        dest++;
    }
    while( *temp )
    {
        *dest = *temp;
        dest++;
        temp++;
    }
    *dest++ = 0;
    *dest = 0;
}

std::wstring query8 = L"GRANT SELECT ON MSysObjects TO Admin;";
query = new SQLWCHAR[query8.length() + 2];
memset( query, '\0', query8.length() + 2 );
uc_to_str_cpy( query, query8 );
ret = SQLExecDirect( m_hstmt, query, SQL_NTS );
delete[] query;
query = NULL;
if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO )
{
    GetErrorMessage( errorMsg, 1 );
    result = 1;
}

@RobertHarvey,代码已添加。 - Igor
@June7,那些是VB代码,你没有查询表格,而是使用了一些VB代码。你能运行这个吗:SELECT name FROM MSysObjects WHERE type IN (1, 4, 6) AND name = 'abcatcol'; - Igor
我确实不知道如何将其翻译成C ++。其中一些回复确实显示了查询。是的,那个查询有效。 - June7
也许我需要安装 MS Access 才能工作? - Igor
@HansUp,你确实有眼光。当我更改ODBC设置并运行我的代码时,我收到了这个错误 -“无法打开Microsoft Access数据库引擎工作组信息文件”。有什么想法吗?我没有安装卡巴斯基,这里有CoMoDo防火墙。 - Igor
显示剩余9条评论
1个回答

1
Access是有授权的。在大多数情况下,您可以针对MSYSobjects进行查询。但是,您可以尝试以下几个方法:
首先,尝试以提升的权限运行程序(.exe)(右键单击并以管理员身份运行)。
接下来。您没有提到这是JET(mdb)格式还是ACE(accdb格式)。
然而-使用ODBC(而不是oleDB驱动程序),据我所知,不支持Grant。因此,您很可能没办法。
您可以考虑创建ADO对象。
我发现即使在Access内部,如果我使用内置的ADO对象,那么grant也会起作用。
但是,如果我使用直接的DAO对象,则无法正常工作。
至于ODBC?好吧,我发现似乎不支持授权-因此,这看起来像是ODBC不支持授权。
此外,在大多数情况下使用GRANT也意味着连接字符串需要包括工作组文件(默认情况下自动打开-即使使用ODBC,但是使用oleDB针对此类数据库(来自.net),我再次发现GRANT会执行oleDB-但是会给出一个关于未指定工作组文件的错误消息。
然而,使用ODBC时,我会得到一个语法错误。那么现在的情况是什么?ODBC不支持授予DDL权限。

首先,我仍在开发中,并在MSVC下运行。其次,我确实说我正在连接到accdb ATM。现在,你是说这是驱动程序的问题 - Windows MS ACCESS ODBC驱动程序不支持GRANT命令吗?正如您所看到的,我正在调用SQLExecute() ODBC API。另外 - 您能否给我一些创建ADO对象并发出GRANT命令的示例代码?谢谢。 - Igor
我没有ADO的例子 - 应该很容易找到一个。但是,是的 - 我断言ODBC不支持或接受GRANT命令。因此,你必须尝试使用ADO。 - Albert D. Kallal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接