MS ACCESS中的GRANT支持



ALL,

MS ACCESS是否支持GRANT-ing权限?

我正在用C++应用程序中的ODBC驱动程序连接到accdb,并试图发出GRANT命令,但收到一个错误,说expecting DELETE, INSERT, PROCEDURE, SELECT or UPDATE

它是在Windows 8.1与MSVC 2017社区。

我正在尝试的命令是:

GRANT SELECT ON MSysObjects TO Admin;

TIA!!

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, '', 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;
}

Grant确实存在。在大多数情况下,您可以针对MSYS对象进行查询。然而,你可以尝试几种方法:

首先,尝试使用提升的权限运行程序(.exe((右键单击并以管理员身份运行(。

接下来。您没有提到这是JET(mdb(格式,还是ACE(accdb格式(。

但是,据我所知,使用ODBC(与oleDB驱动程序相反(不支持Grant。所以,很确定你运气不好。

我想你可以考虑创建一个ADO对象。

我发现即使在Access内部,如果我使用内置的ADO对象,那么grant也会起作用。

但是如果我使用一个直接的DAO对象,那么它就不起作用。

以及ODBC?嗯,我发现拨款似乎不受支持——所以,看起来ODBC不支持拨款。

此外,在大多数情况下使用GRANT也意味着连接字符串需要包括工作组文件(默认情况下,它是自动打开的-即使使用ODBC,但对这样的数据库使用oleDB(来自.net(,我再次发现GRANT确实使用oleDB执行-但会给出一条关于尚未指定工作组文件的错误消息。

但是,使用ODBC,我会得到一个错误语法。那么,在这一点上?ODBC不支持授予DDL。

相关内容

  • 没有找到相关文章

最新更新